我可以访问WPF数据模板中的命名填充渐变吗?
我有一个带有许多分层文本和图形对象的DataTemplate。其中之一是来自矩形的RadialGradientBrush Fill属性的辉光效果。首先,我将矩形命名并绑定到Fill属性,并使用DataTrigger对其进行更改。这很好,但是我在参考资料部分有很多RadialGradientBrush对象,正如您在下面看到的,当我只想更改GradientStops时,需要重复很多。因此,我删除了填充绑定,添加并命名了一个RadialGradientBrush,尽管我可以从资源绑定到该笔刷,但我无法在DataTrigger中访问它。我收到“找不到触发器目标”错误我可以访问WPF数据模板中的命名填充渐变吗?,wpf,datatemplate,datatrigger,fill,brush,Wpf,Datatemplate,Datatrigger,Fill,Brush,我有一个带有许多分层文本和图形对象的DataTemplate。其中之一是来自矩形的RadialGradientBrush Fill属性的辉光效果。首先,我将矩形命名并绑定到Fill属性,并使用DataTrigger对其进行更改。这很好,但是我在参考资料部分有很多RadialGradientBrush对象,正如您在下面看到的,当我只想更改GradientStops时,需要重复很多。因此,我删除了填充绑定,添加并命名了一个RadialGradientBrush,尽管我可以从资源绑定到该笔刷,但我无法
<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访问发光矩形,如下所示
<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访问矩形填充笔刷?有人给小费吗?提前感谢。最后,我使用了以下代码:
<Rectangle Name="Glow" IsHitTestVisible="False" RadiusX="2.5" RadiusY="2.5"
Fill="{StaticResource OrangeGlow}" />
<Storyboard x:Key="GlowColourStoryboard" TargetName="Glow" Duration="0:0:1.5"
AutoReverse="True" BeginTime="0:0:0" RepeatBehavior="Forever">
<ColorAnimation Storyboard.TargetProperty="Fill.GradientStops[0].Color"
To="{StaticResource RedGradient.Colour1}" />
<ColorAnimation Storyboard.TargetProperty="Fill.GradientStops[1].Color"
To="{StaticResource RedGradient.Colour2}" />
<ColorAnimation Storyboard.TargetProperty="Fill.GradientStops[2].Color"
To="{StaticResource RedGradient.Colour3}" />
</Storyboard>
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource GlowColourStoryboard}" />
</DataTrigger.EnterActions>