C# 指示状态的WPF自定义按钮
我想创建一个按钮,启用某些选项,并在使用两个不同的图像启用这些选项时显示。当第一次单击按钮时,它将变为true,并应显示image_true。当再次单击时,它应返回false并显示图像\u false。C# 指示状态的WPF自定义按钮,c#,wpf,C#,Wpf,我想创建一个按钮,启用某些选项,并在使用两个不同的图像启用这些选项时显示。当第一次单击按钮时,它将变为true,并应显示image_true。当再次单击时,它应返回false并显示图像\u false。 我的第一个问题是:按钮具有闩锁操作,因此单击后返回false。有没有办法改变这种行为? 如果否,我可能只使用不同类型的元素,如复选框 在这两种情况下:如何为两种状态分配不同的图像 我知道如何分配一个图像,但我真的不知道如何将它们分配到不同的状态。您可以通过使用ToggleButton来实现这一点
我的第一个问题是:
按钮
具有闩锁操作,因此单击后返回false。有没有办法改变这种行为?如果否,我可能只使用不同类型的元素,如
复选框
在这两种情况下:如何为两种状态分配不同的图像
我知道如何分配一个图像,但我真的不知道如何将它们分配到不同的状态。您可以通过使用ToggleButton来实现这一点,它包含IsChecked属性的三种状态(null、true、false),此外还需要编写控件模板并放置两个触发器(或前一州为三个),如下所示:
<ToggleButton Width="75" Height="75" >
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Name="PART_Border">
<Image Name="PART_Image" ></Image>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="PART_Image" Property="Source">
<Setter.Value>
<BitmapImage UriSource="/images/first.PNG" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter TargetName="PART_Image" Property="Source">
<Setter.Value>
<BitmapImage UriSource="/images/second.PNG" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
之后,您需要将图像添加到项目中,并确保它们的构建操作(来自属性)是资源,最终结果如下:
您可以通过使用ToggleButton来实现这一点,它包含IsChecked属性的三种状态(null、true、false),除此之外,您还需要编写控件模板并放置两个触发器(或三个用于所有先前状态),如下所示:
<ToggleButton Width="75" Height="75" >
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Name="PART_Border">
<Image Name="PART_Image" ></Image>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="PART_Image" Property="Source">
<Setter.Value>
<BitmapImage UriSource="/images/first.PNG" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter TargetName="PART_Image" Property="Source">
<Setter.Value>
<BitmapImage UriSource="/images/second.PNG" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
之后,您需要将图像添加到项目中,并确保它们的构建操作(来自属性)是资源,最终结果如下:
你已经试过了吗?也许有一种更优雅的方法,但是你不能在同一个地方放置两个按钮,启用另一个按钮并禁用自己吗正如我所说的,我已经尝试了链接的方法,但我真的不知道如何从那里继续。我想,使用这种方法并将图像源绑定到一个路径上是可行的每次都换掉,但这不是“好”解决方案。这能帮助你吗?第一个答案有一些类似的状态,你可以选择,如果点击按钮是的,这有点帮助。但他们也只是在点击时更改按钮图像。这会是一个性能方面的问题吗?我只是觉得必须有一种方法来创建一个按钮,预先加载两个图像,然后切换状态。Ple请使用
ToggleButton
,其行为与您所描述的一样。您已经尝试过某事了吗?可能有一种更优雅的方法,但您不能在同一位置放置两个按钮,启用另一个按钮,禁用自己。正如我所说,我尝试过链接的方法,但我真的不知道如何继续。我想最有效的方法是使用这种方法,将图像源绑定到一个path变量,然后每次都将其切换出去。但这不是“好”的方法解决方案。这能帮助你吗?第一个答案有一些类似的状态,你可以选择,如果点击按钮是的,这有点帮助。但他们也只是在点击时更改按钮图像。这会是一个性能方面的问题吗?我只是觉得必须有一种方法来创建一个按钮,预先加载两个图像,然后切换状态。Ple请使用ToggleButton
,它的行为与您所描述的一样。谢谢您的回答!但我似乎无法使它工作。当我在一个完全空白的项目中运行它时,该按钮根本不显示。它在XAML编辑器中,但只要我点击run,它就消失了。检查输出窗口以查看是否有任何错误在运行时谢谢你的回答!不过我似乎无法让它工作。当我在一个完全空白的项目中运行它时,该按钮根本不会显示。它在XAML编辑器中,但一旦我点击运行,它就消失了。检查输出窗口以查看运行时是否有任何错误