我在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>
我阅读了其他帖子,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>
答案 0 :(得分:1)
我认为你正在寻找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"/>
然后在您的C#中,您的事件处理程序可能看起来像这样
private void tb_GotFocus(object sender, RoutedEventArgs e)
{
myRadioButton.IsChecked = true;
}
如果任何TextBox被聚焦,它将检查名为myRadioButton的RadioButton。
答案 1 :(得分:1)
来自MSDN:
您可以将此属性设置为应用setter集合(此setter所属的集合)范围内的任何元素的名称。这通常是包含此setter的模板中的命名元素。
TargetName
主要用于控件模板中,而不仅仅是在尝试使用它的样式中。您可以做的是将RadioButton
IsChecked
DP绑定到IsMouseOver
的{{1}} DP。
答案 2 :(得分:1)
创建一个ControlTemplate并将您的触发器添加到ControlTemplate.Triggers
<ControlTemplate.Triggers>
<Trigger Property="HasText" Value="True">
<Setter Property="Visibility" TargetName="LabelText" Value="Hidden" />
</Trigger>
</ControlTemplate.Triggers>
答案 3 :(得分:0)
为每个RadioButton编写样式,提供相应的TextBox作为触发元素。以下是3个TextBoxes&amp;的示例。 3 RadioButtons。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBox x:Name="txtBox0" Grid.Row="0"/>
<TextBox x:Name="txtBox1" Grid.Row="1"/>
<TextBox x:Name="txtBox2" Grid.Row="2"/>
<StackPanel Grid.Row="3" Orientation="Horizontal">
<RadioButton GroupName="grp1" Content="txt1">
<RadioButton.Style>
<Style TargetType="RadioButton">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused, ElementName=txtBox0}" Value="True">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
</RadioButton>
<RadioButton GroupName="grp1" Content="txt2">
<RadioButton.Style>
<Style TargetType="RadioButton">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused, ElementName=txtBox1}" Value="True">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
</RadioButton>
<RadioButton GroupName="grp1" Content="txt3">
<RadioButton.Style>
<Style TargetType="RadioButton">
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused, ElementName=txtBox2}" Value="True">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
</RadioButton>
</StackPanel>
</Grid>