【问题标题】:WPF Custom Button that indicates state指示状态的 WPF 自定义按钮
【发布时间】:2018-04-27 05:48:34
【问题描述】:

我想创建一个启用某些选项的按钮,并在启用了两个不同图像的选项时显示。当按钮第一次被点击时,它变为 true 并且应该显示 image_true。当它再次被点击时,它应该返回 false 并显示 image_false。
我的第一个问题是:Button 具有闩锁动作,因此在被点击后它会返回 false。有没有办法改变这种行为?
如果不是,我可能只使用不同类型的元素,例如checkbox

在这两种情况下:如何为两种状态分配不同的图像?

我知道如何按照here 的说明分配一张图片,但我真的不知道如何从那里继续将它们分配给不同的状态。

【问题讨论】:

  • 你试过了吗?可能有一种更优雅的方式,但你不能只在同一个地方放置 2 个按钮,从而启用另一个按钮并禁用它们自己
  • 正如我所说,我已经尝试了链接的方法,但我真的不知道如何从那里继续。我想什么会起作用,是使用这种方法并将图像源绑定到路径变量并每次都将其切换出来。但这不可能是“好的”解决方案。
  • 这对你有帮助吗?第一个答案有类似的状态,您可以选择是否单击按钮stackoverflow.com/questions/5971300/…
  • 是的,这有点帮助。但他们也只是在点击时更改按钮图像。这会是性能方面的问题吗?我只是觉得必须有一种方法来创建一个预加载两个图像并切换状态的按钮。
  • 请使用ToggleButton,它的行为与您所描述的一样。

标签: c# wpf


【解决方案1】:

您可以通过使用包含 IsChecked 属性的三个状态(null、true、false)的 ToggleButton 来实现此目的,此外您需要编写控件模板并放置两个触发器(或三个用于所有先前状态),如下所示:

    <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>

之后,您需要将图像添加到您的项目中,并确保它们的构建操作(来自属性)是资源,您得到的最终结果是这样的:

【讨论】:

  • 感谢您的回答!不过,我似乎无法让它工作。当我在一个完全空白的项目中运行它时,按钮根本不显示。它在 XAML 编辑器中,但我一点击运行,它就消失了。
  • 检查输出窗口看运行时是否有错误
猜你喜欢
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多