我在资源中有一个简单的线性渐变画笔,当后面的 VB 代码中触发事件时,我试图在运行时更改特定渐变停止点的颜色。
这是线性渐变:
<LinearGradientBrush x:Key="TopTextBackgroundBrush" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FF9B9696" Offset="0"/>
<GradientStop Color="#FF9B9696" Offset="1"/>
</LinearGradientBrush>
这是带有资源的边界控制:
<Border DockPanel.Dock="Top" CornerRadius="2, 2, 0, 0" BorderBrush="Black" Background="{DynamicResource TopTextBackgroundBrush}" BorderThickness="1,1,1,0">
<TextBlock Name="CaptionTB" TextWrapping="Wrap" Text="Caption" Padding="2,0,0,0"/>
</Border>
这是迄今为止我的活动中的代码。它不起作用,因为它说:
无法设置对象“#FF9B9696,0”的属性,因为它处于只读状态。
Dim LGB1 = DirectCast(Me.FindResource("TopTextBackgroundBrush"), LinearGradientBrush)
LGB1.GradientStops(0).Color = New ColorConverter().ConvertFrom("#FFFFFFFF")
我最近也遇到了同样的问题。这里的问题是 LinearGradientBrush 在使用时会被冻结。 一旦冻结的对象就无法解冻。但您可以克隆它,这会使其解冻副本,然后您可以根据自己的喜好更改 GradientStops 颜色。 就像下面的例子一样(尽管是 C#):
RulerC11B.Fill = RulerC11B.Fill.Clone();
(RulerC11B.Fill as LinearGradientBrush).GradientStops[0].Color = someColor1;
(RulerC11B.Fill as LinearGradientBrush).GradientStops[1].Color = someColor2;