2

次のXAMLグリッドがあります。

 <Grid Style="{StaticResource LayoutRootStyle}" x:Name="mainGrid">
    <Grid.Resources>
        <Storyboard x:Name="FadeOut">
            <DoubleAnimation Duration="3" To="0.0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="gridBackgroundImageBrush" d:IsOptimized="True"/>
        </Storyboard>
        <Storyboard x:Name="FadeIn">
            <DoubleAnimation Duration="3" To="0.35"  Storyboard.TargetProperty="Opacity" Storyboard.TargetName="gridBackgroundImageBrush" d:IsOptimized="True"/>
        </Storyboard>
    </Grid.Resources>

    <Grid.Background>
        <ImageBrush x:Name="gridBackgroundImageBrush" ImageSource="{Binding BackgroundImage}" Opacity="0.35">
        </ImageBrush> 
    </Grid.Background>

プログラムで「FadeOut」アニメーションを開始し、ImageBrushからImageを変更してから、次のように「FadeIn」アニメーションを開始します。

private void t_Tick(object sender, object e)
    {
        try
        {
            FadeOut.Begin();
            this.DefaultViewModel["BackgroundImage"] = BackgroundImage;
            FadeIn.Begin();
        }
        catch { }
    }

ただし、画像はアニメーションなしで変化しています。問題は、ImageBrushの「Opacity」プロパティにアクセスする方法にあると思います。TargetProperty属性に対して次の構文を試しました。

(Control.Background).(ImageBrush.Opacity)

msdnがここに示すように:http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.animation.storyboard.settargetproperty.aspxですが、機能していないようです。誰かがこの問題で私を助けることができますか?

4

1 に答える 1

2

解決策は、ImageBrush で画像を描画してからフェードの視覚的状態を定義するのではなく、画像コントロールを作成することでした。

<Grid Style="{StaticResource LayoutRootStyle}" x:Name="mainGrid">
    <Image Grid.RowSpan="2" x:Name="gridBackgroundImageBrush" Source="{Binding BackgroundImage}" />
</Grid>
<VisualStateGroup x:Name="FadeStates">
        <VisualState x:Name="FadeOutState">
             <Storyboard>
                  <DoubleAnimation Duration="{Binding fadeDuration}" From="0.5" To="0.0" x:Name="fadeOutAnimation" 
                                     Storyboard.TargetProperty="Opacity" 
                                     Storyboard.TargetName="gridBackgroundImageBrush"  />
             </Storyboard>
        </VisualState>
        <VisualState x:Name="FadeInState">
             <Storyboard>
                  <DoubleAnimation Duration="{Binding fadeDuration}" From="0.0" To="0.5" x:Name="fadeInAnimation" 
                                     Storyboard.TargetProperty="Opacity"
                                     Storyboard.TargetName="gridBackgroundImageBrush" />
            </Storyboard>
        </VisualState>
 </VisualStateGroup>
于 2012-11-19T14:27:05.217 に答える