控件内的datatemplate边框需要根据情况更改其背景画笔。
由于我的代码在工作,我在家试图回忆结构,为伪编码道歉。
它看起来像:
<parent control>
<custom:controlwithdatatemplate needs Border background to be green/>
<custom:controlwithdatatemplate needs Border background to be red/>
</parent conrol>
在datatemplate中:
<dataTemplate>
<Border Background="{Binding RelativeSource, findancestor x:Type Border??}"
</dataTemplate>
所以我的猜测是设置边界动态的绑定条件(也许找到Border Type的祖先)。但由于在父控件上设置边框样式可能不会传递到子xaml的datatemplate,我不确定这是否是正确的方法。将brush作为依赖属性公开是唯一的方法吗?我可以以某种方式在父xaml和控件的每个datatemplate中提供两种不同的资源或样式来绑定父xaml中的不同资源/样式吗?
----------- EDIT -------------------
虽然我正在寻找另一种方式而不是使用依赖属性,但我仍然从下面的线程中选择了答案,因为它解决了上述问题,现在无法想到更好的方法。
答案 0 :(得分:1)
<Border Background="{Binding Path=Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border}}}" />
EDIT -------------------------------
澄清之后:
<ParentControl>
<ParentControl.Resources>
<SolidColorBrush x:Key=firstBrush Color="Red" />
<SolidColorBrush x:Key=secondBrush Color="Blue" />
</ParentControl.Resources>
<ChildControl BorderBrush="{DynamicResource firstBrush} />
<ChildControl BorderBrush="{DynamicResource secondBrush} />
</ParentControl>
<ChildControl>
<DataTemplate>
<...>
<Border Background="{Binding Path=BorderBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ParentControl}}}" />
</...>
</DataTemplate>
</ChildControl>
在ChildControl中,您需要定义类型画笔的DP。
答案 1 :(得分:0)
我想,你在寻找datatrigger,
<DataTemplate>
<Border Background="Red" x:Name="bor"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding SomeProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type YouParentType}}}"
Value="SomeValue">
<Setter Property="Background"
Value="Green"
TargetName="bor" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>