WPF 中的 EventHandler - 一个元素的更改会影响另一个元素
EventHandler in WPF - Change in one element affects another
我有一个带有 TextBlock 和 ComboxBox 的堆栈面板,还有一个用作搜索字段的 TextBox。
<StackPanel Grid.Row="1" Grid.Column="2">
<TextBlock Text="Group Filter" Margin="7,0,0,0"/>
<ComboBox Text ="{Binding GroupFilter}" Height="30" Width="130" Margin="0,4,0,0"
Padding="5" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Source={StaticResource GroupFilterEnum}}"
</ComboBox>
</StackPanel>
<TextBox Text="{Binding SingleFilter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="3" Height="30" Width="140" Margin="0,20,0,0" Padding="5" materialDesign:HintAssist.Hint="Search single Id...">
</TextBox>
所以基本上我有一个数据集,您可以根据 GroupFilterEnum 中的预定义设置过滤数据,或者您可以自己在 TextBox 中输入过滤值。
我尝试做的是:
当 TextBox 为空时,一切都应该保持原样。当 TextBox 有一个值时,我想将以下内容添加到 ComboBox 以指示当 TextBox 中有一个值时 ComboBox 处于非活动状态:
IsEditable="False"
IsHitTestVisible="False"
Focusable="False"
Foreground="{StaticResource MaterialDesignBodyLight}"
我尝试为 TextBox 创建一个 TextChanged EventHandler,例如:
private void textChangedEventHandler(object sender, TextChangedEventArgs args)
{
var text = sender.ToString().Replace("System.Windows.Controls.TextBox: ", "");
if (!string.IsNullOrWhiteSpace(text))
{
}
}
但我真的不知道如何从这个 EventHandler 引用 ComboBox。我对此很陌生,所以我并没有真正做过很多 EventHandlers。这是这样做的方法吗?如果是,有人可以帮我处理事件处理程序吗?
或者也许有更好的方法?也许直接在 xaml 文件中?
非常感谢所有帮助,如果需要更多信息,请告诉我。
提前致谢。
如果您想要一个可以像 textBox 或 comboBox 一样使用的控件,那么您的方法就不对了。
comboBox 控件有一个 属性 IsEditable 允许写入或 select 一个值。
试试这个:<ComboBox IsEditable="True"/>
否则,您可以为您的控件命名,您可以通过键入他的名字在您的代码后面获取它。
这里的结果:Result
(我很抱歉我的英语不好,我是法语)。
您可以使用需要实现的转换器将要更改的 ComboBox
属性绑定到 TextBox
的 Text
属性(here is the example).
<TextBox x:Name="MyTextBox"/>
<ComboBox Focusable="{Binding ElementName=MyTextBox, Path=Text, Converter={StaticResource EmptyStringToBooleanConverter}}">
我有一个带有 TextBlock 和 ComboxBox 的堆栈面板,还有一个用作搜索字段的 TextBox。
<StackPanel Grid.Row="1" Grid.Column="2">
<TextBlock Text="Group Filter" Margin="7,0,0,0"/>
<ComboBox Text ="{Binding GroupFilter}" Height="30" Width="130" Margin="0,4,0,0"
Padding="5" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Source={StaticResource GroupFilterEnum}}"
</ComboBox>
</StackPanel>
<TextBox Text="{Binding SingleFilter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="3" Height="30" Width="140" Margin="0,20,0,0" Padding="5" materialDesign:HintAssist.Hint="Search single Id...">
</TextBox>
所以基本上我有一个数据集,您可以根据 GroupFilterEnum 中的预定义设置过滤数据,或者您可以自己在 TextBox 中输入过滤值。
我尝试做的是:
当 TextBox 为空时,一切都应该保持原样。当 TextBox 有一个值时,我想将以下内容添加到 ComboBox 以指示当 TextBox 中有一个值时 ComboBox 处于非活动状态:
IsEditable="False"
IsHitTestVisible="False"
Focusable="False"
Foreground="{StaticResource MaterialDesignBodyLight}"
我尝试为 TextBox 创建一个 TextChanged EventHandler,例如:
private void textChangedEventHandler(object sender, TextChangedEventArgs args)
{
var text = sender.ToString().Replace("System.Windows.Controls.TextBox: ", "");
if (!string.IsNullOrWhiteSpace(text))
{
}
}
但我真的不知道如何从这个 EventHandler 引用 ComboBox。我对此很陌生,所以我并没有真正做过很多 EventHandlers。这是这样做的方法吗?如果是,有人可以帮我处理事件处理程序吗? 或者也许有更好的方法?也许直接在 xaml 文件中?
非常感谢所有帮助,如果需要更多信息,请告诉我。
提前致谢。
如果您想要一个可以像 textBox 或 comboBox 一样使用的控件,那么您的方法就不对了。
comboBox 控件有一个 属性 IsEditable 允许写入或 select 一个值。
试试这个:<ComboBox IsEditable="True"/>
否则,您可以为您的控件命名,您可以通过键入他的名字在您的代码后面获取它。
这里的结果:Result (我很抱歉我的英语不好,我是法语)。
您可以使用需要实现的转换器将要更改的 ComboBox
属性绑定到 TextBox
的 Text
属性(here is the example).
<TextBox x:Name="MyTextBox"/>
<ComboBox Focusable="{Binding ElementName=MyTextBox, Path=Text, Converter={StaticResource EmptyStringToBooleanConverter}}">