Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指示状态的WPF自定义按钮_C#_Wpf - Fatal编程技术网

C# 指示状态的WPF自定义按钮

C# 指示状态的WPF自定义按钮,c#,wpf,C#,Wpf,我想创建一个按钮,启用某些选项,并在使用两个不同的图像启用这些选项时显示。当第一次单击按钮时,它将变为true,并应显示image_true。当再次单击时,它应返回false并显示图像\u false。 我的第一个问题是:按钮具有闩锁操作,因此单击后返回false。有没有办法改变这种行为? 如果否,我可能只使用不同类型的元素,如复选框 在这两种情况下:如何为两种状态分配不同的图像 我知道如何分配一个图像,但我真的不知道如何将它们分配到不同的状态。您可以通过使用ToggleButton来实现这一点

我想创建一个按钮,启用某些选项,并在使用两个不同的图像启用这些选项时显示。当第一次单击按钮时,它将变为true,并应显示image_true。当再次单击时,它应返回false并显示图像\u false。
我的第一个问题是:
按钮
具有闩锁操作,因此单击后返回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编辑器中,但一旦我点击运行,它就消失了。检查输出窗口以查看运行时是否有任何错误