我一辈子都想不出如何在单击时更改 ToggleButton 图像。我查了无数的例子,它们都已经过时了,不再起作用了。或者如果他们这样做,我无法让他们工作。有没有人有我可以查看的最新示例或任何建议?
我先尝试在后面的代码中这样做。我发现的示例使用了 BitmapImage,但由于安全原因无法使用 BeginInit 方法,因此不再可能。
接下来,我尝试了许多样式触发器,但即使直接复制和修改它们以适应正确的参数,我也遇到了许多编译错误。所以我被卡住了。我无法弄清楚如何使用 EventTrigger 来执行此操作,也没有任何旧示例似乎有效。有人有什么想法吗?
最佳答案
为什么不是这样的:
<ToggleButton x:Name="b">
<Image Src="myImage.png" Visibility="{Binding ElementName=b,Path=IsChecked,Converter="{StaticResource BooleanToVisibilityConverter}}"/>
<Image Src="myOtherImage.png" Visibility="{Binding ElementName=b,Path=IsChecked,Converter="{StaticResource BooleanToVisibilityConverter,ConverterParameter=Invert}}"/>
</ToggleButton>
你有一个 bool 值到可见性的转换器,它可以接受一个参数来反转 bool 值。
编辑:
您需要定义一个转换器,以便它可以将 bool?
从 IsChecked
属性转换为 Visibility
枚举。这就是所有绑定(bind)代码所做的。有一个基本实现 here当为真时将转换为 Visibility.Visible
,为假时将转换为 Visibility.Collapsed
。您需要为 参数
添加一个检查,以便在传递 Invert
时反转可见性(在两个图像之间切换)。
另一种方法是在样式中定义图像,并使用 Checked
和 Unchecked
的视觉状态来翻转图像。您可以将一种样式应用于多个按钮,但很难改变每个按钮的图像(我的解决方案就是这样做的)。
这是您设置资源的方式
XAML
<!-- Place this in your window -->
xmlns:converters="clr-namespace:NameSpace"
<!-- Place this above your root UI -->
<Window.Resources>
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
然后在这里使用转换器BooleanToVisibilityConverter
关于c# - 单击 Silverlight 时更改 ToggleButton 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930841/