在我的 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>
如您所见,我已经在 DataGridCheckBoxColumn
的 Style
上插入了一个 DataTrigger
,所以基本上当属性 IsAdding
为 false,应启用包含内容的 Cell
,否则禁用。
这似乎不起作用,甚至启用了 Cell
,为什么?
最佳答案
我怀疑问题出在 LogicalTree 上你的应用程序。你那里的代码实际上应该工作得很好,但看起来你可能正在测试这个 inside of the demo application .通常这会很好,但是添加了一个控件来显示正在破坏逻辑树的 XAML(I have a fix 正在进行但尚未完成)。
您可以通过对演示应用程序进行两处更改来解决此问题:
- 在MainWindow.xaml将
XamlDisplayerHost
替换为常规ContentControl
- 在Grids.xaml将
XamlDisplayerPanel
替换为常规StackPanel
之后,您的样式应该会如您所愿。
关于c# - 如何根据属性值启用或禁用复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009451/