触发目标名称

Aus*_*nTX 9 wpf triggers

我在WPF中有几个文本框和单选按钮集合.我想使用触发器设置oly的一个单选按钮的IsChecked属性,如果任何文本框获得焦点,则该单选按钮具有名称.我查了几个例子但是找不到我要找的东西.请记住,我们使用的是MVVM模式,没有代码.

我尝试了以下代码并出现此编译错误:

无法在样式设置器上设置TargetName属性

<UserControl.Resources>
            <Style x:Name="myTest" TargetType="TextBox">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="RadioButton.IsChecked" Value="True"  TargetName="myRadioButton"></Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

我读了其他帖子,DataTrigger解决了这个问题.

 <Style x:Name="myTest2" TargetType="RadioButton" >
     <Style.Triggers>
        <DataTrigger Binding="{Binding IsFocused, ElementName=myTextBox}" Value="True">
           <Setter Property="IsChecked"  Value="True" ></Setter>
        </DataTrigger>      
    </Style.Triggers>
 </Style>
Run Code Online (Sandbox Code Playgroud)

dec*_*ime 0

我认为您正在寻找 GotFocus 活动。

在 XAML 中:

<TextBox x:Name="textBox1" GotFocus="tb_GotFocus"/>
<TextBox x:Name="textBox2" GotFocus="tb_GotFocus"/>
<TextBox x:Name="textBox3" GotFocus="tb_GotFocus"/>
<RadioButton x:Name="myRadioButton"/>
Run Code Online (Sandbox Code Playgroud)

然后在你的 C# 中你的事件处理程序可能看起来像这样

private void tb_GotFocus(object sender, RoutedEventArgs e)
{
    myRadioButton.IsChecked = true;
}
Run Code Online (Sandbox Code Playgroud)

如果任何文本框获得焦点,它将检查名为 myRadioButton 的 RadioButton。

  • 好吧,我忘了告诉你我们正在起诉 MVVM,并且没有隐藏任何代码。 (2认同)