我正在弄清楚如何在我的WPF窗口中更改故事板的一个属性。
我的窗口有一个动画,可以通过“卷起”动画来减小窗口的大小。根据某些条件(是否设置了某个道具),我们希望窗口更长一些,以适应额外的项目。
我一直在使用this.FindResource()来抓取元素,这没问题。但是当然,故事板被冻结了,其中包含的DoubleAnimations被冻结了,所以我无法改变任何东西。
所以我想,好吧,我只是换掉整个故事板。
<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?构造函数并不真正适用于此,也不适用于方法。
这些课程的文档让我觉得自己偏离了轨道。
任何人都可以帮助我使这种方法有效,或者让我知道另一种更好的方法吗?
答案 0 :(得分:0)
我想出了一种使用替代方法的解决方案。似乎它可能有点hacky,但它确实有效。
我创建了两个故事板ToolbarCollapse_YesIB
和ToolbarCollapse_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)
,则一个故事板处于活动状态。如果MinHeight=(my NoIB size)
,则另一个故事板处于活动状态。
(我实际上有另外一对ToolbarExpand_YesIB/NoIB
模板,在上述触发器中分配给MultiTrigger.EnterActions
,但为了简洁我将它们遗漏了。)
这是对屁的真正痛苦。我希望这有助于其他找到类似情况的人。