多数の階層化されたテキストおよびグラフィック オブジェクトを含む DataTemplate があります。それらの 1 つは、Rectangle の RadialGradientBrush Fill プロパティに由来するグロー効果です。最初に、Rectangle に名前を付けて Fill プロパティにバインドし、DataTrigger を使用して変更しました。これで問題なく動作しましたが、リソース セクションに多数の RadialGradientBrush オブジェクトがあり、以下に示すように、GradientStops を変更することだけを行う場合、多くのことを繰り返す必要があります。そこで、Fill バインディングを削除し、RadialGradientBrush を追加して名前を付けました。リソースからブラシにバインドできますが、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>
Resource グラデーションにバインドすることはできますが、問題は、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 から Rectangle Fill ブラシにアクセスする方法はありますか? ヒントはありますか?前もって感謝します。