C# 如何以编程方式更改/替换模板中的故事板?

C# 如何以编程方式更改/替换模板中的故事板?,c#,wpf,xaml,storyboard,C#,Wpf,Xaml,Storyboard,我花了很长时间才弄明白如何在我的WPF窗口中修改故事板的一个属性 “我的窗口”有一个动画,它通过一种“上卷”动画来缩小窗口的大小。根据某些条件(是否设置了某个道具),我们希望窗口稍微长一点,以容纳额外的物品 我一直在使用这个.FindResource()来获取元素,这没有问题。但当然,故事板是冻结的,其中包含的动画也是冻结的,所以我无法更改任何内容 所以我想,好吧,我会换掉整个故事板 <Trigger Property="IsMouseOver" Value="True">

我花了很长时间才弄明白如何在我的WPF窗口中修改故事板的一个属性

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

我一直在使用这个.FindResource()来获取元素,这没有问题。但当然,故事板是冻结的,其中包含的动画也是冻结的,所以我无法更改任何内容

所以我想,好吧,我会换掉整个故事板

<Trigger Property="IsMouseOver" Value="True">
    <Trigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource ToolbarCollapse_NoIB}" />
    </Trigger.ExitActions>
</Trigger>
这就是我被困的地方。如何为该情节提要创建触发动作?构造函数和方法都不适用于此

这些课程的文档让我觉得我偏离了正轨


有谁能帮我使这种方法有效,或者给我提供另一种更有效的方法吗?

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

我创建了两个故事板,
ToolbarCollapse\u YesIB
ToolbarCollapse\u NoIB
。它们仅在高度属性上有所不同

然后,我用两个多触发程序替换了上面原始问题的触发器:

<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\u YesIB
\u NoIB

所以现在如果
MinHeight=(我的YesIB大小)
,一个故事板是活动的。如果
MinHeight=(我的NoIB大小)
,则另一个情节提要处于活动状态

(实际上,我有另一对
ToolbarExpand\u YesIB/NoIB
模板,分配给上述触发器中的
multi-trigger.entreactions
,但为了简洁起见,我省略了它们。)


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

我用另一种方法想出了一个解决方案。看起来可能有点黑,但它是有效的

我创建了两个故事板,
ToolbarCollapse\u YesIB
ToolbarCollapse\u NoIB
。它们仅在高度属性上有所不同

然后,我用两个多触发程序替换了上面原始问题的触发器:

<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\u YesIB
\u NoIB

所以现在如果
MinHeight=(我的YesIB大小)
,一个故事板是活动的。如果
MinHeight=(我的NoIB大小)
,则另一个情节提要处于活动状态

(实际上,我有另一对
ToolbarExpand\u YesIB/NoIB
模板,分配给上述触发器中的
multi-trigger.entreactions
,但为了简洁起见,我省略了它们。)

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