0

我有以下Checkbox.xaml文件。我想Dropshadow在鼠标悬停上应用两种不同的效果CheckBox。所以我拿了两个MultiTriggers。我想删除这些并使用to of elementMultiTriggers将它们组合成单个触发器。因为由于我应用的第一个触发器,元素将始终具有正确的背景。DataBindingBackgroundBorderBorder

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="..\Colors\Colors.xaml"></ResourceDictionary>
    </ResourceDictionary.MergedDictionaries>

    <ControlTemplate x:Key="CheckBoxTemplate" TargetType="CheckBox" >

       <BulletDecorator >
        <BulletDecorator.Bullet>
            <Border x:Name="Border"  
              Width="13" 
              Height="13" 
              CornerRadius="0" 
              Background="{StaticResource TextNormalBrush}"
              BorderThickness="3"
              BorderBrush="Black">
                </Border>
        </BulletDecorator.Bullet>
        <ContentPresenter Margin="4,0,0,0"
            VerticalAlignment="Center"
            HorizontalAlignment="Left"
            RecognizesAccessKey="True" />
        </BulletDecorator>

        <ControlTemplate.Triggers>
            <Trigger Property="IsChecked" Value="True">
                <Setter TargetName="Border" Property="Background" Value="{StaticResource AlternateLinearBrush}"/>
            </Trigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="True"></Condition>
                    <Condition Property="IsChecked" Value="False"></Condition>
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter TargetName="Border" Property="Effect">
                        <Setter.Value>
                            <DropShadowEffect ShadowDepth="0" Direction="0" BlurRadius="15" Opacity="1" Color="{StaticResource TextNormalColor }">

                            </DropShadowEffect>
                        </Setter.Value>
                    </Setter>

                </MultiTrigger.Setters>
            </MultiTrigger>

            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="True"></Condition>
                    <Condition Property="IsChecked" Value="True"></Condition>
                </MultiTrigger.Conditions>
                <MultiTrigger.Setters>
                    <Setter TargetName="Border" Property="Effect">
                        <Setter.Value>
                            <DropShadowEffect ShadowDepth="0" Direction="0" BlurRadius="15" Opacity="1" Color="{StaticResource AlternateColor }">

                            </DropShadowEffect>
                        </Setter.Value>
                    </Setter>

                </MultiTrigger.Setters>
            </MultiTrigger>                
        </ControlTemplate.Triggers>            
    </ControlTemplate>

    <Style x:Key="CheckBoxStyle" TargetType="{x:Type CheckBox}">
        <Setter Property="Template" Value="{StaticResource CheckBoxTemplate}" />
        <Setter Property="Foreground" Value="{StaticResource TextNormalBrush}" />
        <Setter Property="TextOptions.TextHintingMode" Value="Animated"/>

    </Style>
</ResourceDictionary>
4

1 回答 1

0

你的意思是这样的:

        <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="Border" Property="Effect">
                    <Setter.Value>
                        <DropShadowEffect ShadowDepth="0" Direction="0" BlurRadius="15" Opacity="1" Color="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=Background.Color}">
                        </DropShadowEffect>
                    </Setter.Value>
                </Setter>
        </Trigger>

在此示例中,阴影效果始终具有其边框的背景颜色。

于 2013-04-07T16:19:36.223 回答