将背景绑定到模板化控件

时间:2013-04-07 13:40:00

标签: c# .net wpf checkbox mouseevent

我有Checkbox.xaml个文件。我想对Dropshadow上的鼠标应用两种不同的CheckBox效果。所以我花了两个MultiTriggers。我想删除那些MultiTriggers并使用DataBindingBackground Border元素将它们组合成单个触发器。由于我已应用的第一个触发器,Border元素将始终具有正确的背景。

<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>

1 个答案:

答案 0 :(得分: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>

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

相关问题