最后,我得到了我的定制按钮,几乎表现得像我想要的那样。
问题在于代码:D (IsChecked是DependencyProperty)
<ControlTemplate.Triggers>
<!-- EventTriggers for LMBUp/LMBDown/MouseEnter/MouseLeave -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="False"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MouseEnter}"/>
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource MouseLeave}"/>
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="LayoutRoot" Property="Background" Value="Red"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="False"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="LayoutRoot" Property="Background" Value="Red"/>
</MultiDataTrigger>
</ControlTemplate.Triggers>我认为这有点“肮脏”,而且不完全像预期的那样。每次用户单击按钮时,IsChecked都会从true切换到false,反之亦然。现在,如果发生以下情况
然后,由于第一个$MouseOverColor$,我希望按钮变成$ButtonNormalBackground$而不是MultiDataTrigger。
我的问题是,是否可以简化代码并纠正最后一个问题?
提前感谢!
发布于 2012-09-23 18:12:24
你可能有“价值解决策略”的问题。DependencyProperty有一套如何解析值的策略,请看这里。
如果动画设置了Background of LayoutRoot的值,那么在停止动画之前,其他设置器将不会产生影响(在本例中,设置器被视为“本地值”)。
您可以在第二和第三触发器的<StopStoryboard>中使用EnterActions元素。注意,如果触发时已经停止了情节提要,这将在输出窗口中写入警告。
--或者
您可以在故事板中使用FillBehavior="Stop"。
https://stackoverflow.com/questions/12553500
复制相似问题