绑定背景到模板控件

问题描述:

我有以下Checkbox.xaml文件。我想在CheckBox上应用两种不同的Dropshadow效果。所以我采取了两个MultiTriggers。我想删除那些MultiTriggers并将它们组合为使用DataBindingBackgroundBorder元素的单个触发器。因为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> 
+0

你的问题是什么? – Bernard 2013-04-07 13:44:55

+0

我想用DataBinding背景来访问触发器中的'Border'元素的背景。 – 2013-04-07 13:48:03

+0

我很困惑。你想通过'MultiTrigger'实现两个不同的DropShadow效果。现在你想修改* Border *的背景,因为某些原因。我不明白为什么。有点混淆整个事情。你能解释一下吗,这样我可以提供一个解决方案吗? – DHN 2013-04-07 13:56:48

你的意思是一样的财产以后:

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

在这个例子中,暗影Effact始终有其边框的背景色。