ToggleButton禁用设置在按钮单击时的IsChecked行为

4
有没有办法在单击切换按钮时取消设置ToggleButton的IsChecked属性?我希望通过绑定到自定义属性来处理IsChecked属性。

为了确保我理解正确,您不希望在单击CheckBox时更新isChecked,而是希望仅通过绑定更新isChecked? - Chris W.
是的,我想只通过绑定更新IsChecked,而onClick的IsChecked正在干扰我的绑定。 - Mike
3个回答

2

如果你想让控件只通过绑定处理它的IsChecked状态并阻止用户输入,你可以将IsEnabled="False",但这会使得它在Disabled状态下显得有些不透明,除非你相应地修改控件模板。

我认为你更需要的是一种方法,仅省略用户输入但仍处理你的IsChecked,因此建议像这样设置:

<ToggleButton IsHitTestVisible="False" IsTabStop="False" IsChecked="{Binding blah}"/>

希望这能帮到您,祝一切顺利。

但现在点击不再触发他的代码了。 - Martin
@Martin看了他的评论,我要求他澄清一下.. ;) - Chris W.
谢谢!我没有考虑到这一点,不过这仍然会禁用鼠标悬停效果,不过我认为我可以通过一些样式来进行操作。 - Mike
啊,我想你只是想将它用作静态显示,并没有考虑包含鼠标悬停,如果它不再接受点击的话。如果是这种情况,我可能需要考虑其他方法,但如果它对你有用并且问题已经解决了,那就很好。干杯! - Chris W.
@Chris W.:我假设他想处理点击事件,更新他的视图模型(可能进行验证),并且让视图严格遵守视图模型状态 - 没有一个视图控件自行决定更改其状态 :) - Martin
@Martin Ya 我也会这样假设,所以为了防止标题/问题被误解而请求澄清。然而,在用户体验中,使用ToggleButton/CheckBox等作为布尔提示的静态显示以显示开/关或其他内容是非常常见的,我也多次使用过这种技术,因此认为这必须是目的,没关系。 - Chris W.

1
我知道这个问题很旧,但我认为我的答案可能会对某些人有所帮助。
所以我的问题与导航切换按钮有关。我在代码中将IsChecked属性设置为true,相关视图正在显示,但是当用户按下它时(而视图保持不变),ToggleButton的设计会发生变化。因此,最终我看到了视图,但ToggleButton未被选中,而后面的IsChecked属性被设置为true。完全疯狂。
为了解决这个问题,我制作了自己非常简单的自定义控件:
class CustomToggleButton : ToggleButton
{
    protected override void OnToggle()
    {
        if (IsChecked != true)
        {
            base.OnToggle();
        }
    }
}

现在ToggleButton只从我的代码中取消选中。

1
很好的解决方案Chris W. 谢谢! 如果有人仍然想通过点击按钮进行检查,但防止从UI取消检查:
<Style TargetType="ToggleButton" x:Key="MyToggle">
  <Style.Triggers>
    <Trigger Property="IsChecked" Value="True">
      <!-- Prevents unchecking -->
      <Setter Property="IsHitTestVisible" Value="False"/>
      <Setter Property="IsTabStop" Value="False"/>
    </Trigger>
  </Style.Triggers>
</Style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接