我无法将故事板值绑定到我的viewmodel。我尝试了很多种类的绑定xaml,没有运气。高级目标是能够让ViewModel更改动画轨迹的开始和结束 - 看起来像是一个常见的要求,但是却找不到它的任何示例。许多人说“在MVVM中你永远不应该尝试从ViewModel访问故事板”,如果你需要动态改变动画的起点和终点,这似乎是horeshit。无论如何,我在这里展示了我的第一个天真的例子:
<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,所以我很确定基本的管道工作正在......
非常感谢, 好色
答案 0 :(得分:0)
你不能绑定那些,因为它们需要是freezable,非常确定框架也告诉你。
如果您可以使用新值完全重新创建或修改动画,请使用ValueConverter
或封装正在修改的动画的子类。