我想自定义 wpf 中切换按钮的切换状态。我想在切换按钮打开时将图像设置为切换按钮,并在关闭时设置另一个图像。为此,我想到使用触发器。这就是我最终所做的,
<Window ...>
<Window.Resources>
<Image x:Key="OnImage" Source="C:\ON.jpg" />
<Image x:Key="OffImage" Source="C:\OFF.jpg" />
<Style x:Key="OnOffToggleImageStyle" TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="{StaticResource OnImage}" />
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content" Value="{StaticResource OffImage}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
...
<ToggleButton IsChecked="{Binding Status}" Width="100" Height="35" Style="{StaticResource OnOffToggleImageStyle}" />
...
</DataTemplate>
</ListBox.ItemTemplate>
</Window>
上面的代码片段似乎仅适用于列表框中的两个项目。如果不止一项具有绑定值,状态为 true,则它不起作用(它仅适用于其中一项)。请告诉我我是否朝着正确的方向前进。还告诉我实现这一目标的其他方法。
这里的问题是因为你正在使用Image
资源。这Image
在您的资源中是一个控件的具体实例。它一次只能出现在一个地方。因此,当您的列表中有不止一项时......
这应该适合你:
<Style x:Key="OnOffToggleImageStyle" TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source="C:\ON.jpg" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content">
<Setter.Value>
<Image Source="C:\OFF.jpg" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
请注意,您可以通过使用ImageSource
对于资源中的每个图像文件,然后在Image
。这实际上意味着每个图像仅从磁盘加载一次,而不是 2*N 次(其中 N 是列表中的项目数。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)