Question

J'ai un DataTemplate avec un certain nombre de textes en couches et des objets graphiques. L'un d'eux est un effet de rayonnement qui provient de la RadialGradientBrush propriété de remplissage d'un rectangle. Au début, j'ai appelé le rectangle et lié à la propriété de remplissage et changé en utilisant un DataTrigger. Cette belle travaillée, mais j'ai un certain nombre d'objets RadialGradientBrush dans la section Ressources et comme vous pouvez le voir ci-dessous, il est beaucoup à répéter quand je veux faire est de changer les GradientStops. Donc, j'ai enlevé le remplissage obligatoire et ajouté et un RadialGradientBrush et nommé bien que je peux lier à la brosse de ressources, je ne peux pas y accéder dans le DataTrigger. Je reçois l'erreur « Vous ne trouvez pas la cible de déclenchement ».

<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>

Dans les ressources, j'ai plusieurs objets RadialGradientBrush comme celui-ci.

<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>

Je veux les remplacer par moins de code pour chaque changement de couleur, donc je crée des objets GradientStopCollection dans les ressources pour les remplacer par.

<GradientStopCollection x:Key="EscalatedGradient">
    <GradientStop Color="Aqua" Offset="0.168"/>
    <GradientStop Color="#5E1D96FF" Offset="0.474"/>
    <GradientStop Color="#1101FFFF" Offset="1"/>
</GradientStopCollection>

Bien que je puisse se lier aux gradients de ressources, le problème est que je ne peux pas accéder à la brosse GlowGradient changer sa propriété GradientStops. Je pouvais déjà accéder à la lueur Rectangle en utilisant un DataTrigger avec ce qui suit.

<DataTrigger Binding="{Binding Path=Status}" Value="Escalated">
    <Setter TargetName="Glow" Property="Fill" Value="{StaticResource EscalatedGlow}"/>
</DataTrigger>

Quand j'utilise ce qui suit, je reçois l'erreur "Vous ne trouvez pas la cible de déclenchement.

<DataTrigger Binding="{Binding Path=Status}" Value="Escalated">
        <Setter TargetName="GlowGradient" Property="GradientStops" Value="{StaticResource EscalatedGradient}"/>
</DataTrigger>

Je pense que il doit y avoir un moyen de me sauver de reproduire l'ensemble RadialGraientBrush chaque fois que je veux changer les couleurs. Est-il possible d'accéder à la brosse de remplissage du rectangle DataTrigger? Tous anyone conseils? Merci à l'avance.

Était-ce utile?

La solution

En fin de compte, je suis allé avec le code suivant:

<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>

Je n'ai pas montré les ressources Brush parce que ... eh bien, vous pouvez faire votre propre. Ce Storyboard est utilisé de la manière suivante et fonctionne selon les besoins:

<DataTrigger.EnterActions>
    <BeginStoryboard Storyboard="{StaticResource GlowColourStoryboard}" />
</DataTrigger.EnterActions>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top