我有一个RadioButton,它是作为ItemsControl DataTemplate的一部分动态设置的。
<RadioButton GroupName="Ratings">
<RadioButton.Content>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Score}" />
<TextBlock Text=" - " />
<TextBlock Text="{Binding Description}" />
</StackPanel>
</RadioButton.Content>
</RadioButton>
我有两个预定义的样式(MyCheckedStyle1
和MyUncheckedStyle2
),当我设置RadioButton的Style=
属性时它可以单独运行,但我还没找到一种基于它的IsChecked属性改变风格的方法。
我尝试尝试的大多数方法都会给我一个关于Style object is not allowed to affect the Style property of the object to which it applies.
的例外(例如ContentTemplate触发器)
所以伪代码
if IsChecked = true then
style = MyCheckedStyle1
else if IsChecked = false then
style = MyUncheckedStyle1
我可以使用codebehind执行此操作,但是如果可能的话,我会尽量避免这种情况,并将逻辑放在XAML中。
答案 0 :(得分:3)
将样式应用于无线电的父节点,然后使用触发器通过IsChecked属性更改无线电的样式。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="101" Width="264">
<Window.Resources>
<Style x:Key="MyCheckedStyle1" TargetType="RadioButton">
<Setter Property="Background" Value="Red"/>
</Style>
<Style x:Key="MyCheckedStyle2" TargetType="RadioButton">
<Setter Property="Background" Value="Blue"/>
</Style>
<Style x:Key="ParentStyle" TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<RadioButton Name="RadioButton1" GroupName="Ratings" >
<RadioButton.Content>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Score}" />
<TextBlock Text=" - " />
<TextBlock Text="{Binding Description}" />
</StackPanel>
</RadioButton.Content>
</RadioButton>
<ControlTemplate.Triggers>
<Trigger SourceName="RadioButton1" Property="IsChecked" Value="True">
<Setter TargetName="RadioButton1" Property="Style"
Value="{StaticResource MyCheckedStyle1}"/>
</Trigger>
<Trigger SourceName="RadioButton1" Property="IsChecked" Value="False">
<Setter TargetName="RadioButton1" Property="Style"
Value="{StaticResource MyCheckedStyle2}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<ListBox>
<ContentControl Style="{StaticResource ParentStyle}"/>
<ContentControl Style="{StaticResource ParentStyle}"/>
</ListBox>
</Grid>
</Window>