私の理解から、2つの画像があります.1つはもう一方の上に置かれています。次に、一番上のイメージが完全に透明になるように、中央から始めて、上のイメージ全体が見えなくなり、下のイメージが見えるようになるまでペリメータに広げます。
OpacityMaskをRadialGradientBrushと入力してOpacityMask
と入力することをおすすめします。私はGradientStop
要素のOffset
プロパティをhereとhereのようにアニメートします。
これを達成する方法の完全な例を示します。私はここにToggleButton
を使ってバインドするものを私に与えました。
<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>
最終製品は次のようになります。画像は完全に整列されていませんが、あなたはポイントを得る。
あなたはそれ以上の助けが必要なら、私に教えてください。
なぜ、単にgifを使用しないのですか? –
@MikeEason Gifは継続的に行っています。私のアプリケーションで何らかのイベントが発生したときに、それをやり終えたら、他のイベントが起こるのを待っています。 – MegaMind
チュートリアル チュートリアル[Glass Button](https://blogs.msdn.microsoft.com/mgrayson/2007/02/16/creating-a-glass-button-the-complete-tutorial/)をご覧ください。ブレンドを使用して放射状のグラデーション「グロー」を実装します。このテクニックでは、 [不透明マスクの作成](https://msdn.microsoft.com/en-us/library/cc294816.aspx)を有効にし、アニメーション化することができます。 – Funk