WPF Grid - 如何为一列应用样式?

Posted

技术标签:

【中文标题】WPF Grid - 如何为一列应用样式?【英文标题】:WPF Grid - How to apply a style for just one column? 【发布时间】:2010-10-25 11:45:14 【问题描述】:

我有一个 WPF 网格,其中包含许多行和列,都包含诸如 TextBlocks 和 TextBoxes 之类的内容。

对于这种特定情况,我希望第 1 列中的所有内容都有填充,并且第 2 列中的所有内容都正确对齐。必须在网格中的每个项目上设置这些属性似乎是非常非 WPF 的。

我知道我可以通过执行以下操作为网格中的所有 TextBlocks 创建样式:

<Grid>
  <Grid.Resources>
    <Style TargetType="x:Type TextBox">
      <Setter Property="HorizontalAlignment" Value="Right"/>
    </Style>
  </Grid.Resources>
</Grid>

但是有没有办法将该样式仅应用于第 2 列中的控件?

我应该使用不同的控件吗?

【问题讨论】:

使用原生 Grid 控件是不可能的......也许你可以使用自定义附加属性来做类似的事情 【参考方案1】:

这是我通常做的:

<Style TargetType="x:Type TextBlock" BasedOn="StaticResource x:Type TextBlock">
    <Style.Triggers>
        <Trigger Property="Grid.Column" Value="0">
            <Setter Property="Margin" Value="0,0,2,0" />
        </Trigger>

        <Trigger Property="Grid.Column" Value="2">
            <Setter Property="Margin" Value="20,0,2,0" />
        </Trigger>
    </Style.Triggers>
</Style>

【讨论】:

这正是我想要的!又漂亮又优雅,我怎么没想到呢:)【参考方案2】:

您可以定义一些样式,如下所示,并将它们分配给您的 Column.ElementStyle 属性:

<Window.Resources>
       <Style x:Key="elementStyle" TargetType="TextBlock">
           <Setter Property="VerticalAlignment" Value="Center" />
           <Setter Property="Margin" Value="2,0,2,0" />
       </Style>

       <Style x:Key="rightElementStyle" BasedOn="StaticResource elementStyle" TargetType="TextBlock">
           <Setter Property="HorizontalAlignment" Value="Right" />
       </Style>

       <Style x:Key="centerElementStyle" BasedOn="StaticResource elementStyle" TargetType="TextBlock">
           <Setter Property="HorizontalAlignment" Value="Center" />
       </Style>
</Window.Resources>

<dg:DataGrid AutoGenerateColumns="False">
      <dg:DataGrid.Columns>
           <dg:DataGridTextColumn Binding=Binding Path=Name 
                                  Header="Name" 
                                  ElementStyle="StaticResource centerElementStyle"/>
           <dg:DataGridTextColumn Binding=Binding Path=Amount 
                                  Header="Amount" 
                                  ElementStyle="StaticResource rightElementStyle"/>
    </dg:DataGrid.Columns>
</dg:DataGrid>

【讨论】:

这仅适用于 DataGrid 吗?我看不到如何将其应用于网格。 您可以为每一列分配样式。查看修改后的代码。 我一直在寻找如何使用标准网格来执行此操作,但我会查看 DataGrid,看看是否可以改用它。

以上是关于WPF Grid - 如何为一列应用样式?的主要内容,如果未能解决你的问题,请参考以下文章

wpf Grid 样式怎么设置

WPF中Grid实现网格,表格样式通用类(转)

WPF中的网格样式没有模板属性?

样式中的WPF设置ColumnDefinition.Width不起作用?

如何为 chrome 中的选择控件选项应用 css 样式

如何为包含活动链接的跨度应用css样式[重复]