2013-04-07 3 views
0

У меня есть Checkbox.xaml файл. Я хочу применить два разных эффекта Dropshadow на мыши на CheckBox. Поэтому я взял два MultiTriggers. Я хочу удалить те MultiTriggers и объединить их в один триггер, используя DataBinding до Background из Border. Потому что элемент Border всегда будет иметь правильный фон из-за первого запуска, который я применил.Binding background to templated control

<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

+0

Я хочу использовать DataBinding для фона, чтобы получить фон элемента «Border» в триггере. –

+0

Я в замешательстве. Вы хотите реализовать два разных эффекта «DropShadow» через «MultiTrigger». Теперь вы хотите по какой-либо причине изменить «Background» of * Border *. Я не понимаю, почему. Немного смущает все это. Можете ли вы объяснить это, чтобы я мог, возможно, предоставить решение? – DHN

ответ

0

ли вы имеете в виду Somthing как:

 <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 всегда имеет цвет фона его границы.