【问题标题】:Several MultiDataTriggers works only for the last one几个 MultiDataTriggers 仅适用于最后一个
【发布时间】:2013-03-20 22:38:24
【问题描述】:

UserControl 中,我有一个enum 类型的DP(eGroupStyle 类型的GroupStyle)和一个bool 类型的DP(IsGrouped)。我需要在所有可能的情况下开始一些故事板。但最后一个 MultiDataTrigger 仅适用。我哪里错了?另外我想知道是否存在一种更简单的方法来考虑这些条件。 (检查一次IsGrouped。)

C#:

enum eGroupStyle
{
    GroupStyle1,
    GroupStyle2,
    ∙∙∙,
    GroupStyleN,
}

XAML:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding GroupStyle}" Value="GroupStyle1"/>
        <Condition Binding="{Binding IsGrouped}" Value="False"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard  Storyboard="{StaticResource Storyboard_TurnToUnselectedStyle1}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding GroupStyle}" Value="GroupStyle1"/>
        <Condition Binding="{Binding IsGrouped}" Value="True"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard  Storyboard="{StaticResource Storyboard_TurnToSelectedStyle1}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding GroupStyle}" Value="GroupStyle2"/>
        <Condition Binding="{Binding IsGrouped}" Value="False"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard  Storyboard="{StaticResource Storyboard_TurnToUnselectedStyle2}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding GroupStyle}" Value="GroupStyle2"/>
        <Condition Binding="{Binding IsGrouped}" Value="True"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard  Storyboard="{StaticResource Storyboard_TurnToSelectedStyle2}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>
∙∙∙
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding GroupStyle}" Value="GroupStyleN"/>
        <Condition Binding="{Binding IsGrouped}" Value="False"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard  Storyboard="{StaticResource Storyboard_TurnToUnselectedStyleN}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding GroupStyle}" Value="GroupStyleN"/>
        <Condition Binding="{Binding IsGrouped}" Value="True"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard  Storyboard="{StaticResource Storyboard_TurnToSelectedStyleN}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>

【问题讨论】:

  • 有什么想法吗?有什么猜测吗?有没有可能?
  • 我发现如果 MultiDataTrigger 序列中的当前条件位于新条件之前,其他条件也可能有效! 例如假设当前GroupStyle 设置为GroupStyle2,在这种情况下,将GroupStyle 设置为GroupStyle3, 4, ... N 有效,但不适用于GroupStyle1。对于次要条件,此行为保持不变。例如如果当前GroupStyle 设置为GroupStyle3 而IsGrouped 为Flase,它将触发IsGrouped 设置为True 的条件,但反之则不然!!!!
  • 您没有显示情节提要,我怀疑其中包含的动画可能是问题所在。特别是,您是否在情节提要中的动画上指定FillBehavior="Stop"?触发器可能正在触发,但动画可能没有任何效果。我最近回答了a similar question 涉及WPF 触发器和动画,那里似乎是这样的。
  • 感谢@LukeWoodward。您对我的回答有何看法?
  • 感谢您发布您的答案,它看起来对我来说是“正确的答案”。您的问题可能与我所链接的问题略有不同,因此我对该问题的回答在这里可能效果不佳。我想删除故事板会删除可能“保留”您正在制作动画的动画,正是这些保留的动画给人的印象是只有最后一个触发器实际触发。

标签: c# wpf xaml multidatatrigger


【解决方案1】:

我发现了!我需要在退出操作中删除以前的故事板,如下所示。现在可以了:)

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Path=GroupStyle}" Value="GroupStyle1"/>
        <Condition Binding="{Binding Path=IsGrouped}" Value="False"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard x:Name="BeginStoryboard_TurnToUnselectedStyle1" Storyboard="{StaticResource Storyboard_TurnToUnselectedStyle1}"/>
    </MultiDataTrigger.EnterActions>
    <MultiDataTrigger.ExitActions>
        <RemoveStoryboard BeginStoryboardName="BeginStoryboard_TurnToUnselectedStyle1"/>
    </MultiDataTrigger.ExitActions>
</MultiDataTrigger>

【讨论】:

  • 谢谢!它对我有用。但是,就我而言,我在 ExitActions 上有另一个动画,所以我必须删除那个故事板,而不是 EnterActions 中的故事板。