【发布时间】: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