WPF C# - 列内容对齐方式和样式取决于内容
WPF C# - column content alignment and style depending on content
我有一个包含 3 列的数据网格。最后一列仅通过显示“✓”或“✗”来显示该行的数据集是启用还是禁用。
我想为最后一列设置样式,以便内容对齐居中,并且根据内容 "text" 应该是绿色(对于“✓”)或红色(对于“✗”)。那么我该如何实现呢?
<DataGrid x:Name="employeesDataGrid" Margin="5,55,5,0" VerticalAlignment="Top" Height="172" IsSynchronizedWithCurrentItem="False" MinRowHeight="10" HeadersVisibility="Column" AutoGenerateColumns="False" GridLinesVisibility="None" SelectionMode="Single" RowDetailsVisibilityMode="Collapsed" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
<DataGrid.Columns>
<DataGridTextColumn x:Name="nameHeader" Header="{x:Static p:Resources.nameHeader}" Width="100"/>
<DataGridTextColumn x:Name="surnameHeader" Header="{x:Static p:Resources.surnameHeader}" Width="200" />
<DataGridTextColumn x:Name="isenabledHeader" Header="{x:Static p:Resources.isenabledHeader}" MinWidth="50">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTextColumn.HeaderStyle>
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
如何根据“✓”和“✗”设置不同的单元格样式?
下面是我如何使用 C# 填充数据网格。
nameHeader.Binding = new Binding("Name");
surnameHeader.Binding = new Binding("Surname");
isenabledHeader.Binding = new Binding("IsEnabled");
employeesDataGrid.ItemsSource = null;
Employee employee = new Employee();
// returns a List<Employee>
employeesList = employee.GetAll();
employeesDataGrid.ItemsSource = employeesList;
编辑
我想出了如何自己对齐单元格的文本。代码已更新。所以现在我想把它涂成绿色或红色。有什么建议吗?
如果“✓”和“✗”是字符串值 您可以像这样将 DataTriggers
添加到 DataGridTextColumn
的 CellStyle
中。在我的测试示例中,我使用字符串值 first
表示绿色(您应该将其更改为“✓”)。
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self},
Path=Content.Text}" Value="first">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
我想你如何引入“✓”和“✗”并不重要。如果我正确理解您想将单元格背景颜色设置为绿色或红色,这里有一个 xaml 解决方案:
<DataGridTextColumn x:Name="isenabledHeader" Header="Is Enabled" MinWidth="50">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTextColumn.HeaderStyle>
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter Property="Background" Value="Green"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding IsEnabled}" Value="False">
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="2,0"/>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
我做出的另一个(我希望是安全的)假设是 IsEnabled 是您的 Employee class 上的 属性。我们在这里所做的就是创建几个绑定到 IsEnabled 的 DataTriggers,并将单元格的背景设置为适当的颜色。请注意,我必须将 DataGridCell 的水平对齐方式更改为 "Stretch" 才能填充整个单元格。额外的 DataGridTextColumn.ElementStyle 应该考虑到您想要的居中。
注意:如果您愿意,可以在代码后面添加 DataTriggers,但我个人永远记不住语法,所以我没有把它放在我的答案中:)。
我有一个包含 3 列的数据网格。最后一列仅通过显示“✓”或“✗”来显示该行的数据集是启用还是禁用。 我想为最后一列设置样式,以便内容对齐居中,并且根据内容 "text" 应该是绿色(对于“✓”)或红色(对于“✗”)。那么我该如何实现呢?
<DataGrid x:Name="employeesDataGrid" Margin="5,55,5,0" VerticalAlignment="Top" Height="172" IsSynchronizedWithCurrentItem="False" MinRowHeight="10" HeadersVisibility="Column" AutoGenerateColumns="False" GridLinesVisibility="None" SelectionMode="Single" RowDetailsVisibilityMode="Collapsed" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
<DataGrid.Columns>
<DataGridTextColumn x:Name="nameHeader" Header="{x:Static p:Resources.nameHeader}" Width="100"/>
<DataGridTextColumn x:Name="surnameHeader" Header="{x:Static p:Resources.surnameHeader}" Width="200" />
<DataGridTextColumn x:Name="isenabledHeader" Header="{x:Static p:Resources.isenabledHeader}" MinWidth="50">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTextColumn.HeaderStyle>
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
如何根据“✓”和“✗”设置不同的单元格样式? 下面是我如何使用 C# 填充数据网格。
nameHeader.Binding = new Binding("Name");
surnameHeader.Binding = new Binding("Surname");
isenabledHeader.Binding = new Binding("IsEnabled");
employeesDataGrid.ItemsSource = null;
Employee employee = new Employee();
// returns a List<Employee>
employeesList = employee.GetAll();
employeesDataGrid.ItemsSource = employeesList;
编辑 我想出了如何自己对齐单元格的文本。代码已更新。所以现在我想把它涂成绿色或红色。有什么建议吗?
如果“✓”和“✗”是字符串值 您可以像这样将 DataTriggers
添加到 DataGridTextColumn
的 CellStyle
中。在我的测试示例中,我使用字符串值 first
表示绿色(您应该将其更改为“✓”)。
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self},
Path=Content.Text}" Value="first">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
我想你如何引入“✓”和“✗”并不重要。如果我正确理解您想将单元格背景颜色设置为绿色或红色,这里有一个 xaml 解决方案:
<DataGridTextColumn x:Name="isenabledHeader" Header="Is Enabled" MinWidth="50">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTextColumn.HeaderStyle>
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter Property="Background" Value="Green"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding IsEnabled}" Value="False">
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="2,0"/>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
我做出的另一个(我希望是安全的)假设是 IsEnabled 是您的 Employee class 上的 属性。我们在这里所做的就是创建几个绑定到 IsEnabled 的 DataTriggers,并将单元格的背景设置为适当的颜色。请注意,我必须将 DataGridCell 的水平对齐方式更改为 "Stretch" 才能填充整个单元格。额外的 DataGridTextColumn.ElementStyle 应该考虑到您想要的居中。
注意:如果您愿意,可以在代码后面添加 DataTriggers,但我个人永远记不住语法,所以我没有把它放在我的答案中:)。