在我的应用程序中,特定TextBlock
中的文本取决于检查两个RadioButton
中的哪一个。下面是xaml的一个例子:
<Window x:Class="UTScanForm.Support.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:UTScanForm.Support"
mc:Ignorable="d"
Title="Window1" Height="300" Width="300">
<Grid>
<StackPanel>
<RadioButton x:Name="RB1" Content="RB1"/>
<RadioButton x:Name="RB2" Content="RB2"/>
<TextBlock Text="none">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=RB1}" Value="True">
<Setter Property="Text" Value="RB1"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked, ElementName=RB2}" Value="True">
<Setter Property="Text" Value="RB2"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</Grid>
</Window>
如上面的代码所示,有两个单选按钮,RB1
和RB2
。如果选中RB1
,则文本块中的文本应为RB1
,否则为RB2
。但是,代码不起作用。你能否指出我做了什么错误以及正确的解决方案是什么?
答案 0 :(得分:2)
这是由于dependency property value precedence。 TextBlock上的Text="none"
属性会覆盖样式所做的任何事情。这是一个功能,而不是错误:它允许您使用多个控件上使用的样式设置默认值,然后为特定实例覆盖它们。
修复很简单:使用样式设置器设置默认的“无”文本,其他样式设置器可以覆盖它。
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="none" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=RB1}" Value="True">
<Setter Property="Text" Value="RB1"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked, ElementName=RB2}" Value="True">
<Setter Property="Text" Value="RB2"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
顺便说一下,这不适用于DataTemplate或ControlTemplate触发器。他们可以覆盖属性。