首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiTrigger:绑定到DependencyProperty的条件不起作用

MultiTrigger:绑定到DependencyProperty的条件不起作用
EN

Stack Overflow用户
提问于 2012-09-23 18:38:52
回答 4查看 9.6K关注 0票数 6

我有一个自定义按钮UserControl和自动取款机类型的MainMenuButton,我正在设计它的样式。现在,我想实现一个MultiTrigger,只在满足两个条件时更改按钮的外观。

第一个条件是if IsMouseOver == true。我只是简单地把下面的Condition

代码语言:javascript
复制
<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
    </MultiTrigger.Conditions>
    <MultiTrigger.EnterActions>
        <Setter TargetName="LayoutRoot" Property="Background" Value="Red">
    </MultiTrigger.EnterActions>
    <MultiTrigger.ExitActions>
        <Setter TargetName="LayoutRoot" Property="Background" Value="Black">
    </MultiTrigger.ExitActions>
</MultiTrigger>

第二个条件与DependencyProperty相关

代码语言:javascript
复制
public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(MainMenuButton), new PropertyMetadata(false));

在另一个SO post中,一个用户说我可以使用DataTrigger来对IsCheckedProperty做出反应。所以我尝试了另一篇文章中的代码,但它不起作用:

代码语言:javascript
复制
<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
        <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="False"/>
    </MultiTrigger.Conditions>
    <MultiTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource MouseEnter}"/>
    </MultiTrigger.EnterActions>
    <MultiTrigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource MouseLeave}"/>
    </MultiTrigger.ExitActions>
</MultiTrigger>

如何解决这个问题呢?感谢您的回复!:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-23 21:28:08

让它在同一时间工作。我偶然发现了这篇博客文章,其中包含一个有效的解决方案:http://anders.janmyr.com/search?q=multidatatrigger

将我的代码更改为以下代码:

代码语言:javascript
复制
<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>

现在它起作用了。无论如何,感谢所有回答者的努力!

票数 12
EN

Stack Overflow用户

发布于 2012-09-23 21:21:20

我猜在您的风格中,您没有指定正确的TargetType。这应该行得通-

代码语言:javascript
复制
<Style TargetType="{x:Type local:MainMenuButton}">
   <MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
        <Condition Binding="IsChecked" Value="False"/>
    </MultiTrigger.Conditions>
    // Your setter goes here
</MultiTrigger>
</Style>

应该在xaml中添加名称空间local,该名称空间对应于您的MainMenuButton类所在的名称空间。

票数 1
EN

Stack Overflow用户

发布于 2014-05-15 14:46:18

代码语言:javascript
复制
<Window x:Class="DataBinding.MultiTrigger"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MultiTrigger" Height="300" Width="300">
<Window.Resources>
    <Style TargetType="Button">
        <Style.Setters>
            <Setter Property="Background" Value="BlueViolet"></Setter>
            <Setter Property="Foreground" Value="Red"></Setter>
        </Style.Setters>
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <!--Use only one conditions for Implementations-->
                    <Condition Property="Control.IsFocused" Value="True"></Condition>
                    <Condition Property="Control.IsMouseOver" Value="True"></Condition>
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter Property="Background" Value="Green"></Setter>
                    <Setter Property="Foreground" Value="White"></Setter>
                </MultiTrigger.Setters>
            </MultiTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Button Height="50">The World Game</Button>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12551627

复制
相关文章

相似问题

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