我有一个自定义按钮UserControl和自动取款机类型的MainMenuButton,我正在设计它的样式。现在,我想实现一个MultiTrigger,只在满足两个条件时更改按钮的外观。
第一个条件是if IsMouseOver == true。我只是简单地把下面的Condition
<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相关
public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(MainMenuButton), new PropertyMetadata(false));在另一个SO post中,一个用户说我可以使用DataTrigger来对IsCheckedProperty做出反应。所以我尝试了另一篇文章中的代码,但它不起作用:
<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>如何解决这个问题呢?感谢您的回复!:)
发布于 2012-09-23 21:28:08
让它在同一时间工作。我偶然发现了这篇博客文章,其中包含一个有效的解决方案:http://anders.janmyr.com/search?q=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>现在它起作用了。无论如何,感谢所有回答者的努力!
发布于 2012-09-23 21:21:20
我猜在您的风格中,您没有指定正确的TargetType。这应该行得通-
<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类所在的名称空间。
发布于 2014-05-15 14:46:18
<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>https://stackoverflow.com/questions/12551627
复制相似问题