我不能为我的生活找出如何在点击时更改ToggleButton图像。我查阅了无数的例子,它们都已经过时,不再有效。或者,如果他们这样做,我无法让他们工作。有没有人有我可以看到的最新例子或任何建议?
我尝试先在后面的代码中执行此操作。我发现的示例使用了BitmapImage,但由于安全原因,因为不能使用BeginInit方法,所以这是不可能的。
接下来我尝试了很多样式触发器,但即使直接复制和修改它们以适应正确的参数,我也会遇到许多编译错误。所以我被困住了。我无法弄清楚如何使用EventTrigger来做到这一点,也没有任何旧的例子似乎工作。有人有什么想法吗?
答案 0 :(得分:2)
为什么不能这样:
<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>
你有一个boolean to visibility转换器,可以接受一个参数来反转bool。
编辑:
您需要定义一个转换器,以便它可以将bool?
从IsChecked
属性转换为Visibility
枚举。这就是所有绑定代码所做的事情。有一个基本实现here,当为true时将转换为Visibility.Visible
,在false时将转换为Visibility.Collapsed
。您需要为parameter
添加一个检查,以便在传递Invert
时反转可见性(在两个图像之间切换)。
另一种方法是在样式中定义图像,并使用Checked
和Unchecked
的视觉状态来翻转图像。您可以将样式应用于多个按钮,但很难改变每个按钮的图像(我的解决方案的作用)。
这是您设置资源的方式
<!-- 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
答案 1 :(得分:0)
您可以使用ImageToggleButton和ImageToggleButtonSideBySide(如果您想要ClipFlair项目代码库
的ImageButtons项目中的Mac样式切换[或2状态无线电可以调用它]按钮