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 属性绑定到 TextBoxText 属性(here is the example).

<TextBox x:Name="MyTextBox"/>
<ComboBox Focusable="{Binding ElementName=MyTextBox, Path=Text, Converter={StaticResource EmptyStringToBooleanConverter}}">