如何在DataGrid中设置默认编辑模板的样式

时间:2017-01-13 09:15:13

标签: c# wpf datagrid

在WPF中工作我有一个带有3个文本列的简单DataGrid

我的初始版本是使用DataGridTextColumn

制作的
<DataGrid ...>
  <DataGrid.Columns>
    <DataGRidTextColum ... />
    <DataGRidTextColum ... />
    <DataGRidTextColum ... />
  </DataGrid.Columns>
</DataGrid>

默认行为是当用户点击进行编辑时,“单元格内容”将成为可编辑的文本框。 但是,此TextBox不如单元格宽。

Very small Editor
目前,我可以使用DataGridTemplateColumn解决这个问题,然后使用TextBox显示查看和编辑的内容。

但是,我希望找到一个很好的解决方案,只需设置编辑时使用的默认TextBox的样式。

当Cell在EditMode中使用我的属性时,我无法找到如何定位TextBox的语法。 我想将宽度设置为Cell的100%。

是否有人建议如何在WPF中完成此操作?

编辑#1
Icebat通知我,标准行为是填充整个宽度。 这是我的代码,显示了这个问题

        <DataGridTextColumn Binding="{Binding Path=Status}"
                            CanUserReorder="False"
                            CanUserResize="False"
                            CanUserSort="True"
                            Width="Auto"
                            IsReadOnly="True"
                            MinWidth="100"
                            Header="Status" 
                            CellStyle="{StaticResource VerticalCenterAlignDataGridCellStyle}"
                            />

我猜它也可能与Style相关,但我没有任何样式在没有Key的情况下定位TextBox。

1 个答案:

答案 0 :(得分:1)

您的应用程序中有一些样式会导致TextBox不能伸展以适应单元格的整个宽度,因为这不是默认行为。

无论如何,您可以将列的EditingElementStyle属性设置为TextBox样式以更改TextBox的样式:

<DataGridTextColumn Binding="{Binding Prop}">
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="TextBox">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="Background" Value="Yellow" />
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>

如果这不起作用,可能会有一些自定义的CellStyle引起问题。你也可以覆盖这个:

<DataGridTextColumn Binding="{Binding Prop}" Width="400">
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="TextBox">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="Background" Value="Yellow" />
        </Style>
    </DataGridTextColumn.EditingElementStyle>
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>