首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以简化这个XAML代码吗?(MultiDataTrigger,DependencyProperty)

可以简化这个XAML代码吗?(MultiDataTrigger,DependencyProperty)
EN

Stack Overflow用户
提问于 2012-09-23 15:15:37
回答 1查看 243关注 0票数 0

最后,我得到了我的定制按钮,几乎表现得像我想要的那样。

问题在于代码:D (IsCheckedDependencyProperty)

代码语言:javascript
复制
<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,反之亦然。现在,如果发生以下情况

  • IsChecked ==真
  • 用户单击以将IsChecked切换为false
  • 鼠标一直在按钮上

然后,由于第一个$MouseOverColor$,我希望按钮变成$ButtonNormalBackground$而不是MultiDataTrigger

我的问题是,是否可以简化代码并纠正最后一个问题?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2012-09-23 18:12:24

你可能有“价值解决策略”的问题。DependencyProperty有一套如何解析值的策略,请看这里

如果动画设置了Background of LayoutRoot的值,那么在停止动画之前,其他设置器将不会产生影响(在本例中,设置器被视为“本地值”)。

您可以在第二和第三触发器的<StopStoryboard>中使用EnterActions元素。注意,如果触发时已经停止了情节提要,这将在输出窗口中写入警告。

--或者

您可以在故事板中使用FillBehavior="Stop"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12553500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档