wpf - 如何在不设置 IsEnabled 的情况下防止 ToggleButton 被切换

标签 wpf togglebutton

我有一个 ToggleButtons 列表被用作 ListBox 中的 ItemTemplate,类似于 this answer使用列表框的多选模式。但是,我需要确保始终选择至少一项。

我可以通过在 ListBox.SelectionChanged 事件上将一个项目重新添加到 ListBox 的 SelectedItems 集合中来从 ListBox 获得正确的行为,但我的 ToggleButton 仍然移出其切换状态,因此我认为我需要在此过程中更早地停止它。

我想这样做而不在最后一个按钮 Selected 上设置 IsEnabled="False"因为我更喜欢保持 Enabled 视觉样式而不必重做我的按钮模板。有任何想法吗?

最佳答案

您可以覆盖 OnToggle通过不调用基本实现来防止切换状态的方法:

public class LockableToggleButton : ToggleButton
{
    protected override void OnToggle()
    {
        if (!LockToggle)
        {
            base.OnToggle();
        }
    }

    public bool LockToggle
    {
        get { return (bool)GetValue(LockToggleProperty); }
        set { SetValue(LockToggleProperty, value); }
    }

    // Using a DependencyProperty as the backing store for LockToggle.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty LockToggleProperty =
        DependencyProperty.Register("LockToggle", typeof(bool), typeof(LockableToggleButton), new UIPropertyMetadata(false));
}

关于wpf - 如何在不设置 IsEnabled 的情况下防止 ToggleButton 被切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548863/

相关文章:

java - Android "Cannot resolve symbol"用于setOnCheckedChangeListener 和buttonView

javascript - 如果按钮在事件类中,则禁用切换按钮单击功能

wolfram-mathematica - 在 Mathematica 中调整 TogglerBar 按钮大小

wpf - 如何使TreeViewItem上的IsMouseOver的WPF触发器不影响moused-over控件的所有父级?

wpf - 在 wpf 中以编程方式添加主机控件时,命令绑定(bind)不起作用

c# - Windows 8 上的 Matlab 生成器 NE/MCR

android - 左右 Android 抽屉导航相互重叠

android - 如何将单选按钮用作切换按钮 (Android)?

c# - 每次在 PRISM 中发生导航时,如何创建一个新 View ?

wpf - 如何在重置数据时重置 WPF 工具包图表调色板