2

我花了很长时间弄清楚如何在我的 WPF 窗口中更改情节提要的一个属性。

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

我一直在使用 this.FindResource() 来抓取元素,这没问题。但当然,Storyboard 被冻结了,其中包含的 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

这就是我卡住的地方。如何为该情节提要创建 TriggerAction?构造函数并不真正适用于此,方法也不适用。

这些课程的文档让我认为我偏离了轨道。

任何人都可以帮助我使这种方法奏效,或者让我了解另一种效果更好的方法吗?

4

1 回答 1

0

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

我创建了两个故事板,ToolbarCollapse_YesIB并且ToolbarCollapse_NoIB. 它们仅在 height 属性上有所不同。

然后我用两个 MultiTriggers 替换了我原来的问题触发器:

<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 字段的存在,我设置MinHeightToolbarCollapsedHeight_YesIB_NoIB

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

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

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

于 2012-04-23T18:45:55.453 回答