gpt4 book ai didi

c# - 如何以编程方式更改/替换模板中的 StoryBoard?

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:51 24 4
gpt4 key购买 nike

我费了好大的劲才想出如何在我的 WPF 窗口中更改 Storyboard 的一个属性。

我的窗口有一个动画,可以通过一种“卷起”动画来减小窗口的大小。根据某些条件(是否设置了某个 Prop ),我们希望窗口更长一点以容纳额外的项目。

我一直在使用 this.FindResource() 来抓取元素,这没问题。但是当然,Storyboard 被卡住了,其中包含的 DoubleAnimations 也被卡住了,所以我无法更改任何内容。

所以我想,好吧,我将换掉整个 Storyboard。

<Trigger Property="IsMouseOver" Value="True">
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource ToolbarCollapse_NoIB}" />
</Trigger.ExitActions>
</Trigger>

我在想,以编程方式,我可以进入代码隐藏并更改触发器以使用 ToolbarCollapse_YesIB。

在那次尝试中,我可以做到这一点:

var tbTemplate = (ControlTemplate)this.FindResource("ToolbarTemplate");
var newStoryboard = (Storyboard)this.FindResource("ToolbarCollapse_YesIB");
tbTemplate.Triggers[2].ExitActions[0] = ??? needs to be a TriggerAction

这就是我被困的地方。如何为该 Storyboard创建 TriggerAction?构造函数和方法并不真正适用于此。

这些类(class)的文档让我觉得我偏离了正轨。

谁能帮助我使这种方法奏效,或者告诉我另一种更有效的方法?

最佳答案

我想出了一个使用替代方法的解决方案。看起来它可能有点 hacky,但它确实有效。

我创建了两个 Storyboard,ToolbarCollapse_YesIBToolbarCollapse_NoIB。它们仅在高度属性上有所不同。

然后我用两个 MultiTriggers 替换了上面我原来问题的 Trigger:

<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="MinHeight"
Value="{StaticResource ToolbarCollapsedHeight_YesIB}"/>
</MultiTrigger.Conditions>
<MultiTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource ToolbarCollapse_YesIB}" />
</MultiTrigger.ExitActions>
</MultiTrigger>

<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="MinHeight"
Value="{StaticResource ToolbarCollapsedHeight_NoIB}"/>
</MultiTrigger.Conditions>
<MultiTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource ToolbarCollapse_NoIB}" />
</MultiTrigger.ExitActions>
</MultiTrigger>

我使用对象的构造函数来设置 MinHeight。根据我的 IB 字段的存在,我将 MinHeight 设置为 ToolbarCollapsedHeight_YesIB_NoIB

所以现在如果 MinHeight=(my YesIB size),一个 Storyboard是事件的。如果 MinHeight=(my NoIB size),则另一个 Storyboard处于事件状态。

(我实际上有另一对 ToolbarExpand_YesIB/NoIB 模板,分配给上述触发器中的 MultiTrigger.EnterActions,但为了简洁起见,我将它们省略了。)

这是一个真正的痛处。我希望这可以帮助其他发现类似情况的人。

关于c# - 如何以编程方式更改/替换模板中的 StoryBoard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10261389/

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