需要控制DataGridTemplateColumn

时间:2015-07-07 19:48:07

标签: c# wpf xaml

我在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>

1 个答案:

答案 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部分搞砸了一些默认值,并且让它们全部成为一个痛苦。