我有一个DataGridTemplateColumn,它定义了一个绑定了Background和Foreground属性的TextBlock。这允许颜色根据绑定属性的值进行更改。到目前为止一切都很好,除了我希望默认选择的行颜色覆盖我的绑定背景颜色。我怎么能在xaml中做到这一点?
<DataGridTemplateColumn Header="Text">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Text}"
Background="{Binding Path=BackgroundColor}"
Foreground="{Binding Path=ForegroundColor}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
最终,似乎我需要确定单元格是否在所选行中。如果是这样,请使用默认选定的行背景颜色,否则使用绑定的背景颜色。我不知道如何接受这个。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以避免直接绑定Background
而是将Style
分配给TextBlock
,{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}
使用选择false
上的DataTrigger
Background
然后才将{{1}}设置为绑定。
答案 1 :(得分:0)
这不是最优雅的解决方案,但它相当简单......
向Item添加'CurrentBackgroundColor'属性(需要实现属性更改),默认情况下设置为BackgroundColor。这就是你将背景绑定到的地方。
使用以下逻辑将属性DataGrid的双向SelectedItem绑定添加到属性:
public Item SelectedItem
{
get
{
return selectedItem;
}
set
{
if (selectedItem != value)
{
if (selectedItem != null)
{
selectedItem.CurrentBackgroundColor = selectedItem.BackgroundColor;
}
selectedItem = value;
if (selectedItem != null)
{
selectedItem.CurrentBackgroundColor = null;
}
RaisePropertyChanged("SelectedItem");
}
}
}
这是做什么的
如果您追求更优雅的解决方案,我会调查EventTriggers