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 - 如何为一列应用样式?的主要内容,如果未能解决你的问题,请参考以下文章