You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CheckBox未选中时启用控件?无需转换器的XAML实现

无需转换器实现CheckBox未选中时启用Button

当然可以啦!不用自定义转换器也能轻松实现这个需求,给你两种简单的方案:

方案一:使用Style触发器

这种方法完全通过XAML的触发器逻辑实现,不需要依赖任何转换器:

<CheckBox x:Name="myCheckBox" Content="选中我就禁用按钮" />
<Button Content="可操作按钮">
    <Button.Style>
        <Style TargetType="Button">
            <!-- 默认状态:按钮处于启用状态 -->
            <Setter Property="IsEnabled" Value="True"/>
            <!-- 监听CheckBox的选中状态,一旦选中就禁用按钮 -->
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=myCheckBox, Path=IsChecked}" Value="True">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

原理很直观:先给按钮设置默认启用,再通过DataTrigger监听CheckBox的IsChecked状态,当CheckBox被选中时,动态修改按钮的启用状态,刚好达成“未选中时启用Button”的效果。

方案二:使用内置的BooleanNegationConverter

WPF本身自带了一个BooleanNegationConverter转换器,不需要你自己编写,直接拿来用即可:
首先在资源节点中声明这个转换器(以Window级别为例):

<Window.Resources>
    <BooleanNegationConverter x:Key="BooleanNegationConverter"/>
</Window.Resources>

然后直接在Button的绑定中使用这个转换器:

<CheckBox x:Name="myCheckBox" Content="选中我就禁用按钮" />
<Button Content="可操作按钮" 
        IsEnabled="{Binding ElementName=myCheckBox, Path=IsChecked, Converter={StaticResource BooleanNegationConverter}}" />

这个转换器的作用就是对布尔值取反,当CheckBox的IsChecked为True时,绑定后按钮的IsEnabled会自动变成False,完美匹配你要的逻辑。

内容的提问来源于stack exchange,提问作者L. Page

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:09:13