我正在尝试自定义我的ToggleButtons,以便在选中时他们以绿色显示“是”,如果未选中,则以红色显示“否”。
我创建了以下样式,该样式位于我的样式资源字典中。
<!-- ToggleButtons -->
<Style x:Key="YesNoToggleStyle" TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="SpringGreen" />
<Setter Property="Content">
<Setter.Value>
<TextBlock Text="Yes"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Background" Value="Crimson" />
<Setter Property="Content">
<Setter.Value>
<TextBlock Text="No"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
这有点......如果ToggleButton是任一值的最后一个,则它会正确显示。具有相同值的所有先前按钮均为空白。身高也在缩小,但我用触发器上方的'Height'Setter修正了。为了说明,当创建新记录时,它看起来像:
并且在我再次点击按钮1,2和3以后:
我最初使用周围网格引用的样式:
<Grid>
...
<Grid.Resources>
<Style BasedOn="{StaticResource YesNoToggleStyle}" TargetType="{x:Type ToggleButton}" />
</Grid.Resources>
但改变这一点,以便每个ToggleButton单独引用样式(<ToggleButton Style="{StaticResource YesNoToggleStyle}" ... />
)并没有什么不同。
我查看了Customizing the toggle state of a toggle button in wpf和Override ToggleButton Style效果相同的内容,但是他们讨论的是外部图片,我的问题都在wpf中。
我还看了第二个答案:i want to change backcolor of toggle button when toggle button ischecked and viceversa in WPF但是a)我只有VS2012附带的混合+草图流预览,和b)我是一个混合的总菜鸟,无法得到答案中的Select the "Checked State"
到Reset the Background Color
指令(如果此任务需要混合工具,我会感到惊讶。)
有人能告诉我怎么做让多个ToggleButtons正确使用相同的风格吗?
答案 0 :(得分:3)
这对我有用。 Dictionary1.xaml
中的某处:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="YesNoToggleStyle" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}">
<Style.Triggers>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Background" Value="Crimson" />
<Setter Property="Content" Value="No"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="SpringGreen" />
<Setter Property="Content" Value="Yes"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
请注意,该样式基于ToolBar.ToggleButtonStyle
。
<Grid>
<Grid.Resources>
<ResourceDictionary Source="pack://application:,,,/Dictionary1.xaml"/>
</Grid.Resources>
<ItemsControl ItemContainerStyle="{StaticResource YesNoToggleStyle}">
<ToggleButton />
<ToggleButton />
<ToggleButton />
</ItemsControl>
</Grid>
答案 1 :(得分:1)
尝试将Content属性替换为ContentTemplate:
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="Yes"/>
</DataTemplate>
</Setter.Value>
</Setter>
答案 2 :(得分:0)
在我的情况下,我想要一个&#34; Locked&#34; ToggleButton在我的应用程序中定义和重用的公共dll中。 这是我的结果,对我有用。也许有人发现它很有用(把它放在Resourcedictionary.xaml中):
<BitmapImage x:Key="LockedLock"
UriSource="/...;component/Resources/Lock_closed_16p.png" />
<BitmapImage x:Key="OpenLock"
UriSource="/...;component/Resources/Lock_open_16p.png" />
<Style x:Key="LockButton"
TargetType="ToggleButton">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image Source="{DynamicResource OpenLock }"
Width="12"
Height="12"
Name="contentimage" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton , AncestorLevel=1, Mode=FindAncestor }, Path=IsChecked}"
Value="True">
<Setter Property="Image.Source"
TargetName="contentimage"
Value="{DynamicResource LockedLock }" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
致记: