禁用控件的DataGridTemplateColumn样式WPF
问题描述:
我在我的WPF应用程序中有一个DataGrid
控件,并且我有一个复选框列作为其中一列。我正在使用DataGridTemplate
来构建数据网格。我的目标是更改禁用复选框的任何复选框数据网格单元格的背景颜色。我的复选框列如下:禁用控件的DataGridTemplateColumn样式WPF
<!-- style for the checkbox column cells -->
<Style x:Key="DefaultCheckboxCellStyle" TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Background" Value="HotPink" />
</Trigger>
</Style.Triggers>
</Style>
...
<DataGridTemplateColumn Header="MyCheckBoxColumn" CellStyle="{StaticResource DefaultCheckboxCellStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chk" IsChecked="{Binding MyChkChecked, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding Path=MyChkEnabled}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
没有我做的似乎改变了残疾人的复选框的单元格背景。我显示禁用的复选框,但所有单元格本身仍处于启用状态。有没有办法将内部复选框控件的启用值绑定到单元格?如果是这样,我可以在我的触发器中使用它。
非常感谢!
答
禁用复选框,如您所见,不会禁用单元格。有几种方法可以解决这个问题。
一种是让Style触发器绑定到禁用复选框的相同viewmodel属性。这属于DefaultCheckboxCellStyle
,取代你的触发器。
<Style.Triggers>
<DataTriger Binding="{Binding MyChkEnabled}" Value="True">
<Setter Property="Background" Value="HotPink" />
</DataTriger>
</Style.Triggers>
或者你可以在DefaultCheckboxCellStyle
尝试这个办法:让你有触发,并禁用实际的细胞。然后,您可以省略另一个禁用复选框本身的XAML,因为它本身就是单元格的子元素。
<Setter Property="IsEnabled" Value="{Binding MyChkEnabled}" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Background" Value="HotPink" />
</Trigger>
</Style.Triggers>
UpdateSourceTrigger=PropertyChanged
顺便说一句,那里是没有操作。
这样做伎俩@Ed Plunkett谢谢! –