WPF VisualStateManager动画绑定
我正在Button.Trigger中使用一个简单的双动画。来自的动画绑定到根元素实际高度。这正如预期的那样有效 接下来,我尝试将故事板移动到VisualStateManager。现在WPF抱怨: System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。BindingExpression:Path=ActualWidth;DataItem=null;目标元素为“DoubleAnimation”(HashCode=29201322);目标属性为“To”(类型为“Nullable`1”) 无法在VisualStateManager.VisualStateGroups/VisualState中的动画中使用绑定吗 似乎不是。我通过将情节提要移动到参考资料中解决了这个问题。所以现在GameToTitle将起作用,而TitleToGame将失败 我仍然很想知道这是否是预期的 相关XAML:WPF VisualStateManager动画绑定,wpf,binding,visualstatemanager,Wpf,Binding,Visualstatemanager,我正在Button.Trigger中使用一个简单的双动画。来自的动画绑定到根元素实际高度。这正如预期的那样有效 接下来,我尝试将故事板移动到VisualStateManager。现在WPF抱怨: System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。BindingExpression:Path=ActualWidth;DataItem=null;目标元素为“DoubleAnimation”(HashC
<Grid x:Name="MainInterface">
<Grid.Resources>
<Storyboard x:Key="GameToTitle">
<DoubleAnimation Storyboard.TargetName="GameScreenInterface" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)" From="0" To="{Binding Path=ActualHeight, ElementName=MainInterface}" Duration="0:0:0.2"/>
<DoubleAnimation Storyboard.TargetName="TitleScreenInterface" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)" From="{Binding Path=ActualHeight, ElementName=MainInterface, Converter={Converters:InverseConverter}}" To="0" Duration="0:0:0.2"/>
</Storyboard>
</Grid.Resources>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="TitleScreenState" Storyboard="{StaticResource ResourceKey=GameToTitle}"/>
<VisualState x:Name="GameScreenState">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="GameScreenInterface" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)" From="{Binding Path=ActualHeight, ElementName=MainInterface}" To="0" Duration="0:0:0.2"/>
<DoubleAnimation Storyboard.TargetName="TitleScreenInterface" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)" From="0" To="{Binding Path=ActualHeight, ElementName=MainInterface, Converter={Converters:InverseConverter}}" Duration="0:0:0.2"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<View:TitleScreen x:Name="TitleScreenInterface"/>
<View:GameScreen x:Name="GameScreenInterface" />
</Grid>
正如问题的注释所述,包含绑定的故事板必须声明为资源,而不是在VisualStateGroup中内联,绑定才能工作。这是因为VisualStates不是VisualTree的一部分。另一方面,资源是有限的 您可以使用Snoop(或类似的实用程序)查看应用程序的可视化树,从而自己将其可视化。您会注意到,资源节点出现在Snoop中的可视化树中,但VisualState没有
是的,您应该提供一些XAML。谢谢,但是问题现在已经解决了。我把情节提要移到了参考资料中。不确定内联故事板失败的原因。(忽略转换器的内容-它只是将值乘以-1得到负值)内联情节提要失败,因为VisualState不是逻辑树的一部分,因此任何对逻辑树的依赖(例如绑定)都将失败。事实上,我很惊讶它能在将故事板转移到本地资源时起作用。我不知道为什么,但我要了@KentBoogaart-我实际上测试了这种方法,但它似乎不起作用。它确实调用了转换器,但似乎没有设置属性。我不知道为什么它对戈兰有效。那些绑定应该有效吗?或者它仅仅是一个可以建造的东西?基本上,这就是创建需要在WPF上绑定的动画的方法吗?