我在DataGridTemplateColumns旁边有一个带DataGridTextColumns的WPF DataGrid。模板列中的单元格包含一个文本框,我在选中复选框时禁用该文本框。我的问题是这两种类型的列中的单元格的外观/行为在编辑时不匹配。在下面的XAML中,我在模板列中设置了文本框的背景以匹配它所在的单元格,这是文本列中文本框的工作方式。现在我需要模板列中的文本框在编辑时变为白色,文本列中的文本框也是如此。
这是我的XAML:
<DataGridTextColumn Header="Rh" MinWidth="50" Binding="{Binding HorizontalResistivity, StringFormat=N2, Mode=TwoWay}"/>
<DataGridTemplateColumn Header="Rh min" MinWidth="50" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="Rmin" Text="{Binding HorizontalResistivityMin, StringFormat=N2, Mode=TwoWay}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0"
Background="{Binding Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=HorizontalResistivityIsFixed}" Value="True">
<Setter TargetName="Rmin" Property="IsEnabled" Value="False" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 0 :(得分:0)
我已经合理地接近我需要的答案了。在放弃确定必须禁用数据网格单元之前,我放弃了DataGridTemplateColumn并恢复到我正在使用的DataGridTextColumn。这是我的XAML:
<DataGridTextColumn Header="Rh min" MinWidth="50" Binding="{Binding HorizontalResistivityMin, StringFormat=N2, Mode=TwoWay}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding HorizontalResistivityIsFixed}" Value="True">
<Setter Property="IsEnabled" Value="false"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
有些解释是有道理的。在我正确绑定了IsEnabled属性之后,我发现单元格中的TextBlock不再居中(它向左对齐),因此ElementStyle部分对齐TextBlock。此外,在编辑过程中,单元格内容将向左移动。在编辑过程中,单元格内容是一个TextBox,所以我有EditingElementStyle部分来对齐TextBox。
只留下一个问题,在编辑此列中的任何TextBox时,整行的高度会扩大,可能是10%。在没有禁用功能的任何DataGridTextColumn中都不会发生这种情况。如果我不包含EditingElementStyle部分,也不会发生这种情况。似乎添加DataGridTextColumn.CellStyle部分搞砸了一些默认值,并且让它们全部成为一个痛苦。