gpt4 book ai didi

WPF VisualStateManager 动画绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 06:36:48 27 4
gpt4 key购买 nike

我在 Button.Trigger 中使用了一个简单的 DoubleAnimation。动画 From 绑定(bind)到根元素 ActualHeight。这按预期工作。

接下来,我尝试将 Storyboard 移至 VisualStateManager。现在 WPF 提示:

System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。绑定(bind)表达式:路径=实际宽度;数据项=空;目标元素是“DoubleAnimation”(HashCode=29201322);目标属性是'To'(类型'Nullable`1')

不能在 VisualStateManager.VisualStateGroups/VisualState 内的动画中使用绑定(bind)吗?

似乎没有。我通过将 Storyboard移动到资源来解决问题。所以现在 GameToTitle 将工作,而 TitleToGame 将失败。

我仍然很高兴知道这是否是预期的。

相关 XAML:

<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>

最佳答案

正如问题的评论所指出的那样,包含绑定(bind)的 Storyboard 必须在 VisualStateGroup 中声明为资源而不是内联才能使绑定(bind)起作用。这是因为 VisualStates 不是 VisualTree 的一部分。另一方面,资源是。

您可以通过使用 Snoop(或类似的实用程序)查看应用程序的可视化树,自己将其可视化。您会注意到资源节点出现在 Snoop 的可视化树中,但 VisualStates 没有。

Storyboards appearing in the visual tree.

关于WPF VisualStateManager 动画绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4781530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com