c# - 如何根据属性值启用或禁用复选框?

标签 c# wpf xaml

在我的 DataGrid 中,我有一个 DataGridCheckBoxColumn 实现:

<DataGrid ItemsSource="{Binding Collection}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding Selected}"
                                ElementStyle="{StaticResource MaterialDesignDataGridCheckBoxColumnStyle}"
                                EditingElementStyle="{StaticResource MaterialDesignDataGridCheckBoxColumnEditingStyle}">
         <DataGridCheckBoxColumn.CellStyle>
             <Style TargetType="DataGridCell">
                 <EventSetter Event="CheckBox.Unchecked" Handler="Match_Unchecked"/>
                  <Style.Triggers>

                                        <!-- Enabling -->
                                        <DataTrigger Binding="{Binding DataContext.IsAdding, 
                    RelativeSource={RelativeSource AncestorType=Window}}" Value="false">
                                            <Setter Property="IsEnabled" Value="True" />
                                        </DataTrigger>

                                        <!-- Disabling -->
                                        <DataTrigger Binding="{Binding DataContext.IsAdding, 
                    RelativeSource={RelativeSource AncestorType=Window}}" Value="True">
                                            <Setter Property="IsEnabled" Value="False" />
                                        </DataTrigger>

        </Style>
</DataGridCheckBoxColumn.CellStyle>

如您所见,我已经在 DataGridCheckBoxColumnStyle 上插入了一个 DataTrigger,所以基本上当属性 IsAdding 为 false,应启用包含内容的 Cell,否则禁用。

这似乎不起作用,甚至启用了 Cell,为什么?

最佳答案

我怀疑问题出在 LogicalTree 上你的应用程序。你那里的代码实际上应该工作得很好,但看起来你可能正在测试这个 inside of the demo application .通常这会很好,但是添加了一个控件来显示正在破坏逻辑树的 XAML(I have a fix 正在进行但尚未完成)。

您可以通过对演示应用程序进行两处更改来解决此问题:

  1. MainWindow.xamlXamlDisplayerHost 替换为常规 ContentControl
  2. Grids.xamlXamlDisplayerPanel 替换为常规 StackPanel

之后,您的样式应该会如您所愿。

关于c# - 如何根据属性值启用或禁用复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009451/

相关文章:

c# - 在 C# 中终止指定任务而不是进程

WPF DataGrid 好教程?

c# - 从 url 通用 windows 应用程序下载并保存图片

WPF - Groupbox 标题对齐

c# - 如何测试WPF表单?

android - 背景在 iOS 上显示,但在 Android Xamarin 上不显示

c# - PasswordHasher 方法的用户参数有什么用?

c# - 存储在事件处理程序中的变量中的值稍后为空,为什么?

c# - 将 SQLServer 的 DateTime 转换为 MySQL

c# - Xml 数据到 WPF TreeView 的双向绑定(bind)