0

ビューモデルにバインドするストーリーボードの値を取得するのに問題があります。私は多くの種類のバインド xaml を試しましたが、うまくいきませんでした。高レベルの目標は、ViewModel がアニメーションの軌跡の開始と終了を変更できるようにすることです。これは一般的な要件のようですが、その例を見つけることができませんでした。多くの人は、「MVVM では、ViewModel からストーリーボードにアクセスしようとするべきではありません」と言っていますが、アニメーションの開始点と終了点をその場で変更する必要がある場合、これはばかげているように思えます。いずれにせよ、最初の単純な例をここに示しました。

<UserControl 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:FishTank" x:Class="FishTank.FishTankControlView" 
         mc:Ignorable="d" 
         d:DesignHeight="100" d:DesignWidth="100" >
<UserControl.Resources>
    <Storyboard x:Key="Storyboard1">
        <DoubleAnimationUsingKeyFrames x:Name="xTransform" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="image">
            <SplineDoubleKeyFrame KeyTime="0" Value="-155"/>
            <SplineDoubleKeyFrame KeyTime="0:0:4.5" Value="521"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames x:Name="yTransform" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="image">
            <SplineDoubleKeyFrame KeyTime="0" Value="{Binding YPos1}"/>
            <SplineDoubleKeyFrame KeyTime="0:0:4.5" Value="{Binding YPos2}"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</UserControl.Resources>

<UserControl.DataContext>
    <local:FishTankControlViewModel/>
</UserControl.DataContext>

<UserControl.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
        <BeginStoryboard Storyboard="{DynamicResource Storyboard1}"/>
    </EventTrigger>
</UserControl.Triggers>

<Grid Background="Transparent">
    <Image x:Name="image" Width="100" Height="100" Source="pack://siteoforigin:,,,/Resources/Fish orange_right.png" RenderTransformOrigin="0.5,0.5">
        <Image.RenderTransform>
            <TransformGroup>
                <ScaleTransform/>
                <SkewTransform/>
                <RotateTransform/>
                <TranslateTransform/>
            </TransformGroup>
        </Image.RenderTransform>
    </Image>
</Grid>

Ypos1 と Ypos2 を Y 変換の始点と終点にバインドしたいと考えています。RelativeSource と FindAncestor を使用してさまざまなバリエーションを試しましたが、ほとんど頭に浮かびません。可能であれば、3.5 フレームワークに固執できるソリューションが必要です。

「StaticResource Storyboard1」を「DynamicResource Storyboard1」に変更してみましたが、うまくいきませんでした。

注 - 健全性チェックとして、ボタンやテキストブロックなどの通常のコントロールをこれら 2 つのプロパティ Ypos1 と Ypos2 にバインドできることを確認したので、基本的な配管が機能していると確信しています...

どうもありがとう、ランディ

4

1 に答える 1

0

それらはフリーズ可能である必要があるため、それらをバインドすることはできません。フレームワークも同様にそう言っているはずです。

ValueConverter変更するアニメーションをカプセル化する またはサブクラスを使用して、新しい値でアニメーションを完全に再作成または変更することができます。

于 2013-05-24T01:33:53.530 に答える