我有一个带有许多分层文本和图形对象的 DataTemplate。其中之一是来自 Rectangle 的 RadialGradientBrush Fill 属性的发光效果。起初,我将 Rectangle 命名为并绑定到 Fill 属性并使用 DataTrigger 对其进行更改。这工作得很好,但是我在资源部分中有许多 RadialGradientBrush 对象,正如您在下面看到的,当我想要做的只是更改 GradientStops 时,需要重复很多。所以我删除了 Fill 绑定并添加并命名了 RadialGradientBrush,虽然我可以从 Resources 绑定到画笔,但我无法在 DataTrigger 中访问它。我收到“找不到触发目标”错误。
<Rectangle x:Name="Glow" IsHitTestVisible="False" RadiusX="1.5" RadiusY="1.5" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" StrokeThickness="0" Opacity="1.0">
<Rectangle.Fill>
<RadialGradientBrush x:Name="GlowGradient" Center="0.5,0.848" GradientOrigin="0.5,0.818" RadiusX="-1.424" RadiusY="-0.622" GradientStops="{StaticResource DefaultGradient}">
<RadialGradientBrush.RelativeTransform>
<TransformGroup>
<ScaleTransform CenterX="0.5" CenterY="0.848" ScaleX="1" ScaleY="1.8"/>
<SkewTransform AngleX="0" AngleY="0" CenterX="0.5" CenterY="0.848"/>
<RotateTransform Angle="-33.418" CenterX="0.5" CenterY="0.848"/>
<TranslateTransform Y="0.278"/>
</TransformGroup>
</RadialGradientBrush.RelativeTransform>
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
在资源中,我有几个像这样的 RadialGradientBrush 对象。
<RadialGradientBrush x:Key="EscalatedGlow" Center="0.5,0.848" GradientOrigin="0.5,0.818" RadiusX="-1.424" RadiusY="-0.622">
<RadialGradientBrush.RelativeTransform>
<TransformGroup>
<ScaleTransform CenterX="0.5" CenterY="0.848" ScaleX="1" ScaleY="1.8"/>
<SkewTransform AngleX="0" AngleY="0" CenterX="0.5" CenterY="0.848"/>
<RotateTransform Angle="-33.418" CenterX="0.5" CenterY="0.848"/>
<TranslateTransform Y="0.278"/>
</TransformGroup>
</RadialGradientBrush.RelativeTransform>
<GradientStop Color="Aqua" Offset="0.168"/>
<GradientStop Color="#5E1D96FF" Offset="0.474"/>
<GradientStop Color="#1101FFFF" Offset="1"/>
</RadialGradientBrush>
我想为每次颜色更改用更少的代码替换它们,所以我在资源中创建了一些 GradientStopCollection 对象来替换它们。
<GradientStopCollection x:Key="EscalatedGradient">
<GradientStop Color="Aqua" Offset="0.168"/>
<GradientStop Color="#5E1D96FF" Offset="0.474"/>
<GradientStop Color="#1101FFFF" Offset="1"/>
</GradientStopCollection>
虽然我可以绑定到资源渐变,但问题是我无法访问 GlowGradient 画笔来更改其 GradientStops 属性。我以前可以使用带有以下内容的 DataTrigger 访问 Glow Rectangle。
<DataTrigger Binding="{Binding Path=Status}" Value="Escalated">
<Setter TargetName="Glow" Property="Fill" Value="{StaticResource EscalatedGlow}"/>
</DataTrigger>
当我使用以下内容时,出现“找不到触发目标”错误。
<DataTrigger Binding="{Binding Path=Status}" Value="Escalated">
<Setter TargetName="GlowGradient" Property="GradientStops" Value="{StaticResource EscalatedGradient}"/>
</DataTrigger>
我在想,每次我想更改颜色时,都必须有一种方法可以让我免于复制整个 RadialGraientBrush。有没有办法从 DataTrigger 访问矩形填充画笔?任何提示任何人?提前致谢。