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”,但没有成功。

注意 - 作为健全性检查,我确认我能够将按钮和文本块等普通控件绑定到这两个属性 Ypos1 和 Ypos2,所以我很确定基本管道正在工作......

非常感谢,兰迪

4

1 回答 1

0

你不能绑定它们,因为它们需要是可冻结的,很确定框架也告诉你了。

ValueConverter如果有的话,您可以使用封装正在修改的动画的子类或子类来完全重新创建或使用新值修改动画。

于 2013-05-24T01:33:53.530 回答