<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="True">
<Condition.Binding>
<MultiBinding Converter="{StaticResource BooleanLogicMultiConverter}" ConverterParameter="OR">
<Binding Path="IsMouseOver" RelativeSource="{RelativeSource self}" />
<Binding Path="IsChecked" RelativeSource="{RelativeSource self}" />
</MultiBinding>
</Condition.Binding>
</Condition>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter TargetName="border" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource AncestorType=controls:Card}, Path=HoverBorderBrush}"/>
<Setter TargetName="border" Property="Background" Value="{Binding RelativeSource={RelativeSource AncestorType=controls:Card}, Path=HoverBackGround}"/>
<Setter TargetName="btn1" Property="Visibility" Value="Visible"/>
</MultiDataTrigger.Setters>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Name="IsFocusedTrueBeginStoryBoard" Storyboard="{StaticResource OnMouseIn}" />
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<BeginStoryboard Name="IsFocusedFalseBeginStoryBoard" Storyboard="{StaticResource OnMouseOut}" />
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
</ControlTemplate.Triggers>
干 ......
附上Converter
internal class BooleanLogicMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values == null || values.Length == 0)
return false;
if (parameter == null)
{
parameter = "AND";
}
string logic = parameter.ToString().ToUpper();
if (logic == "AND")
{
foreach (var value in values)
{
if (value is bool && !(bool)value)
{
return false;
}
}
return true;
}
else if (logic == "OR")
{
foreach (var value in values)
{
if (value is bool && (bool)value)
{
return true;
}
}
return false;
}
else
{
throw new ArgumentException("Parameter must be 'AND' or 'OR'");
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}