c# - 单击 Silverlight 时更改 ToggleButton 图像

标签 c# silverlight image xaml togglebutton

我一辈子都想不出如何在单击时更改 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 时反转可见性(在两个图像之间切换)。

另一种方法是在样式中定义图像,并使用 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

关于c# - 单击 Silverlight 时更改 ToggleButton 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8930841/

相关文章:

c# - 将 sprintf 转换为 C# 的问题

c# - 如何使用 AutomationId 识别 WinForms DevExpress 控件?

C# 将字符串行拆分为多个字符串

c# - asp.net 核心托管服务中的 "timer + Task.Run"与 "while loop + Task.Delay"

c# - IValueConverter 和异常验证

php - 从服务器设置图像后如何刷新 ImageView 在我的情况下,它不更新 ImageView

jquery - 使用 jquery 显示图像的一部分

Silverlight 3 缺少 ScrollViewer.ScrollChanged 事件解决方法?

c# - 如何捕获麦克风缓冲区

ServletOutputStream 的 PDF 文件中的图像问题