如何在运行时在 VB 代码中更改 LinearGradientBrush 中特定 GradientStop 的颜色?

问题描述 投票:0回答:1

我在资源中有一个简单的线性渐变画笔,当后面的 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")
wpf
1个回答
0
投票

我最近也遇到了同样的问题。这里的问题是 LinearGradientBrush 在使用时会被冻结。 一旦冻结的对象就无法解冻。但您可以克隆它,这会使其解冻副本,然后您可以根据自己的喜好更改 GradientStops 颜色。 就像下面的例子一样(尽管是 C#):

        RulerC11B.Fill = RulerC11B.Fill.Clone();
        (RulerC11B.Fill as LinearGradientBrush).GradientStops[0].Color = someColor1;
        (RulerC11B.Fill as LinearGradientBrush).GradientStops[1].Color = someColor2;
© www.soinside.com 2019 - 2024. All rights reserved.