我有一个要求,我需要在Datagrid行背景中显示一行。所以我写了这段代码:
<DataGrid.RowBackground>
<LinearGradientBrush EndPoint="0,0" StartPoint="{Binding GradientPoint}" MappingMode="Absolute" SpreadMethod="Repeat">
<GradientStop Color="{Binding LineColor}" Offset="0" />
<GradientStop Color="{Binding LineColor}" Offset="0.1" />
<GradientStop Color="White" Offset="0.1" />
<GradientStop Color="White" Offset="1" />
</LinearGradientBrush>
</DataGrid.RowBackground>
现在,我可以第一次成功画一条线。我有一些代码可以进行一些格式化,并更改数据网格行的高度。一旦它改变了高度,我调用下面的代码,我假设Brush应该从绑定中获取Color和Start Point。绑定应该将新值返回到DataGrid Row Background。
dtMainGrid.Items.Refresh();
dtMainGrid.UpdateLayout();
编辑:我也尝试包含这个,但没有帮助:(
dtMainGrid.InvalidateVisual();
但是,问题是,当我刷新Items,甚至是布局时,DataGrid RowBackground画笔都没有刷新。它似乎是将点和颜色存储在缓存中并且没有刷新布局,所以我的线路没有移动,因为它没有刷新。
任何帮助?
编辑:添加我的属性:
private System.Windows.Media.Color lColor;
public System.Windows.Media.Color LineColor
{
get
{
return lColor;
}
set
{
lColor = value;
}
}
public System.Windows.Point GradientPoint { get { return Context.GetContext().GradientPoint; } }
好的,万一有人想知道,这些房产都很好。就是这样,它是第一次被调用,并且对于后续请求,它甚至不被调用。我通过提供断点来测试它。
编辑2#:在此处添加解决方案。对于属性使用了数据触发器,因为我只能在我的属性Gradient Point中找到四个不同的选项,我只需要添加4个数据触发器,如下所示:
<DataTrigger Binding="{Binding GradientPoint}" Value="1">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0,0" StartPoint="0,15" MappingMode="Absolute" SpreadMethod="Repeat">
<GradientStop Color="{Binding LineColor}" Offset="0" />
<GradientStop Color="{Binding LineColor}" Offset="0.05" />
<GradientStop Color="White" Offset="0.05" />
<GradientStop Color="White" Offset="1" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
谢谢, V