单击Silverlight时更改ToggleButton图像

时间:2012-01-19 17:51:08

标签: c# silverlight image xaml togglebutton

我不能为我的生活找出如何在点击时更改ToggleButton图像。我查阅了无数的例子,它们都已经过时,不再有效。或者,如果他们这样做,我无法让他们工作。有没有人有我可以看到的最新例子或任何建议?

我尝试先在后面的代码中执行此操作。我发现的示例使用了BitmapImage,但由于安全原因,因为不能使用BeginInit方法,所以这是不可能的。

接下来我尝试了很多样式触发器,但即使直接复制和修改它们以适应正确的参数,我也会遇到许多编译错误。所以我被困住了。我无法弄清楚如何使用EventTrigger来做到这一点,也没有任何旧的例子似乎工作。有人有什么想法吗?

2 个答案:

答案 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时反转可见性(在两个图像之间切换)。

另一种方法是在样式中定义图像,并使用CheckedUnchecked的视觉状态来翻转图像。您可以将样式应用于多个按钮,但很难改变每个按钮的图像(我的解决方案的作用)。

这是您设置资源的方式

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

答案 1 :(得分:0)

您可以使用ImageToggleButton和ImageToggleButtonSideBySide(如果您想要ClipFlair项目代码库

的ImageButtons项目中的Mac样式切换[或2状态无线电可以调用它]按钮