【发布时间】:2019-02-14 08:58:44
【问题描述】:
我目前从事一个 WPF 项目,该项目在自动生成的数据网格中处理数据。如何设置触发器,根据空文本框更改列的背景颜色?
我当前的用户控件 XAML 创建了一个网格,其中保留了数据网格。我为每个 DataGridColumnHeader 设置了一个新的 ContentTemplate,其中保留了一个 TextBlock(用于实际标题)和一个用于过滤的 TextBox。
我尝试为 DataGridCell 设置触发器,该触发器有效,但仅更改了单元格的颜色。我找不到数据网格列的特定目标类型。
<UserControl x:Class="...">
<Grid>
<DataGrid AutoGenerateColums="True" IsReadOnly="True" x:Name="MyDataGrid">
<DataGrid.Resources>
<Style TargetType="x:Type DataGridColumnHeader=">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock x:Name="myBlock" Text="{Binding}" TextWrapping="Wrap" />
<TextBox x:Name="myBox" KeyUp="KeyUpEvent" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
</DataGrid>
</Grid>
如果 TextBox 填充有内容,我希望更改数据网格列的颜色。目前我不知道如何为数据网格列设置特定触发器,如果该列是自动生成的。 编辑 #1: 类似的东西:
这是数据网格未设置任何过滤器的情况。但是,只要您在其中一个过滤器中输入过滤器文本,外观就会发生变化,如下所示:
编辑 #2:
我能够构建一个以编程方式为行着色的解决方案,而无需为标题着色。那不见了。你有什么建议吗?
见以下代码:
private void StyleRows(string text, string name)
{
if(text != "" && column != "")
{
foreach(DataGridColumn column in DataGrid.Columns)
{
if(column.Header == column)
{
Style style = new Style(typeof(DataGridCell));
style.Settes.Add(new Setter(DataGridCell.BackgroundProperty, System.Windows.Media.Brushes.Red));
column.cellStyle = style
}
}
}
}
问题: 有没有办法在 XAML 中做到这一点?
感谢您的帮助!
【问题讨论】: