绑定背景到模板控件
问题描述:
我有以下Checkbox.xaml
文件。我想在CheckBox
上应用两种不同的Dropshadow
效果。所以我采取了两个MultiTriggers
。我想删除那些MultiTriggers
并将它们组合为使用DataBinding
至Background
的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>
答
你的意思是一样的财产以后:
<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始终有其边框的背景色。
你的问题是什么? – Bernard 2013-04-07 13:44:55
我想用DataBinding背景来访问触发器中的'Border'元素的背景。 – 2013-04-07 13:48:03
我很困惑。你想通过'MultiTrigger'实现两个不同的DropShadow效果。现在你想修改* Border *的背景,因为某些原因。我不明白为什么。有点混淆整个事情。你能解释一下吗,这样我可以提供一个解决方案吗? – DHN 2013-04-07 13:56:48