Von meinem Verständnis, haben Sie zwei Bilder, eines auf der anderen Seite auf der Oberseite platziert. Dann möchten Sie, dass das obere Bild vollständig transparent wird, beginnend in der Mitte und dann auf den Umfang ausgedehnt, bis das gesamte obere Bild nicht mehr sichtbar ist und das untere Bild durchscheinen kann.
Um dies zu tun, würde ich Ihnen raten, eine OpacityMask mit einer als OpacityMask
zu verwenden. Ich würde dann die Offset
Eigenschaft der GradientStop
Elemente wie beschrieben here und here animieren.
Hier ist ein vollständiges Beispiel, wie Sie dies erreichen können. Ich habe hier einen ToggleButton
verwendet, um mir etwas zu geben, an das ich mich binden kann.
<ToggleButton>
<ToggleButton.Template>
<ControlTemplate>
<Grid Background="Transparent">
<Image Source="Resources/ShieldTwo.png"/>
<Image Source="Resources/ShieldOne.png">
<Image.OpacityMask>
<RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
<GradientStop Color="Transparent" Offset="0"/>
<GradientStop Color="Transparent" Offset="0.0"/>
<GradientStop Color="Black" Offset="0.0"/>
<GradientStop Color="Black" Offset="1"/>
</RadialGradientBrush>
</Image.OpacityMask>
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource FindAncestor, AncestorType=ToggleButton}}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="OpacityMask.(RadialGradientBrush.GradientStops)[1].(GradientStop.Offset)"
From="0"
To="1"
Duration="0:0:1"/>
<DoubleAnimation Storyboard.TargetProperty="OpacityMask.(RadialGradientBrush.GradientStops)[2].(GradientStop.Offset)"
From="0"
To="1"
Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="OpacityMask.(RadialGradientBrush.GradientStops)[1].(GradientStop.Offset)"
From="1"
To="0"
Duration="0:0:1"/>
<DoubleAnimation Storyboard.TargetProperty="OpacityMask.(RadialGradientBrush.GradientStops)[2].(GradientStop.Offset)"
From="1"
To="0"
Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Grid>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
Und hier ist, wie das Endprodukt aussehen würde. Die Bilder sind nicht perfekt aufgereiht, aber Sie bekommen den Punkt.
Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.
Warum benutzen Sie nicht einfach ein 'gif'? –
@MikeEason Gif geht kontinuierlich, ich möchte, dass es passiert, wenn ein Ereignis in meiner Anwendung auftritt und wenn es fertig ist, bleibt es so und wartet auf ein anderes Ereignis. – MegaMind
Werfen Sie einen Blick auf die [Glass Button] (https://blogs.msdn.microsoft.com/mgrayson/2007/02/16/creating-a-glass-button-the-complete-tutorial/) Tutorial. Es implementiert einen radialen Farbverlauf "glühen" mit Blend. Mit dieser Technik sollten Sie in der Lage sein, [Erstellen Sie eine Deckkraftmaske] (https://msdn.microsoft.com/en-us/library/cc294816.aspx) und animieren Sie es. – Funk