【问题标题】:How do I move repeating styles to resources section?如何将重复样式移至资源部分?
【发布时间】:2011-11-03 15:24:27
【问题描述】:

我有以下 xaml 代码。

<tk:DataGrid
    ItemsSource="{Binding Path=Products}"
    AutoGenerateColumns="False">
    <tk:DataGrid.Columns>
        <tk:DataGridTextColumn
                    Header="Id">
            <tk:DataGridTextColumn.CellStyle>
                <Style TargetType="{x:Type tk:DataGridCell}">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <TextBlock Margin="0,10"  Text="{Binding Path=Id}" />
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </tk:DataGridTextColumn.CellStyle>
        </tk:DataGridTextColumn>
        <tk:DataGridTextColumn
                    Header="Product">
            <tk:DataGridTextColumn.CellStyle>
                <Style TargetType="{x:Type tk:DataGridCell}">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <TextBlock Margin="0,10"  Text="{Binding Path=Name}" />
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </tk:DataGridTextColumn.CellStyle>
        </tk:DataGridTextColumn>
    </tk:DataGrid.Columns>
</tk:DataGrid>

如何摆脱复制粘贴?将其移动到资源的直接方法失败了,因为 Text="{Binding Path=XYZ}" 停止工作。

【问题讨论】:

    标签: .net wpf xaml .net-3.5


    【解决方案1】:

    我不认为你可以在这里做你想做的事,即两个单元格都有一个模板定义。但是,使用 DataGridTemplateColumn 会删除一些 XAML 行(使用 DataGridTextColumn 然后覆盖其控件模板有点奇怪):

        <DataGrid ItemsSource="{Binding Path=Products}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="ID">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Margin="10,0" Text="{Binding Path=ID}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Name">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Margin="10,0" Text="{Binding Path=Name}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    

    还有另一种方法,这次使用 DataGridTextColum,它应该也会给你一些接近你想要的东西:

        <DataGrid Name="ui_datagrid" AutoGenerateColumns="False">
            <DataGrid.Resources>
                <Style TargetType="{x:Type DataGridCell}">
                    <Setter Property="Padding" Value="0,10"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type DataGridCell}">
                                <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                                    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            </DataGrid.Columns>
        </DataGrid>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多