WPF 动画冲突解决方案 (类似Over+IsChecked)

 <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();
        }
    }

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值