WPF重构重复DataGridTemplate

时间:2014-08-20 17:27:42

标签: c# wpf xaml

我正在设置一些我的datagrid列是可以包装的,下面有很多重复的代码。我希望将其提取到一个样式,然后可能在DataGridTextColumn级别定义它,但我无法定义文本框,只能定义标题。我尝试的是不完整的,不允许我找到要包装的列值:

    <Style x:Key="GridColumnWrap" TargetType="DataGridColumnHeader">
        <Setter Property="TextBlock.Text" Value="{Binding Value}" />
    </Style>

当前的XAML布局:

    <DataGrid.Columns>
        <DataGridTextColumn Header="Key" Binding="{Binding Key}" />
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.Header>
                <TextBlock Text="Summary" />
            </DataGridTemplateColumn.Header>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Summary}" TextWrapping="Wrap"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.Header>
                <TextBlock Text="Description" />
            </DataGridTemplateColumn.Header>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Description}" TextWrapping="Wrap"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Status" Binding="{Binding Status}" />
        <DataGridTextColumn Header="Resolution" Binding="{Binding Resolution}" />
    </DataGrid.Columns>

1 个答案:

答案 0 :(得分:1)

尝试使用DataGridTextColumn.ElementStyle,如下所示:

<Window.Resources>
    <Style x:Key="WrapStyle" TargetType="{x:Type TextBlock}">
        <Setter Property="TextWrapping" Value="Wrap" />
    </Style>
</Window.Resources>

<DataGrid Name="MyDataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="TestWrap" 
                            Binding="{Binding Path=TestValue}"
                            ElementStyle="{StaticResource WrapStyle}" />
    </DataGrid.Columns>
</DataGrid>