我有2 DataTemplate
s(A& B)。 A包含Expander
,扩展程序的HeaderTemplate
指向另一个DataTemplate
(B)。
DataTemplate
B如下所示:
<DataTemplate x:Key="ProjectExpanderHeader">
<Border CornerRadius="2,2,0,0"
Background="{StaticResource ItemGradient}"
HorizontalAlignment="{Binding HorizontalAlignment,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}},
Mode=OneWayToSource}">
<local:ItemContentsUserControl Height="30"/>
</Border>
</DataTemplate>
当A CornerRadius
的{{1}}属性设置为true时,是否可以设置B Border
的{{1}}?
提前致谢。
答案 0 :(得分:1)
您可以通过引入CornerRadius类型的新attched属性(例如Helper.CornerRadiusProperty)并将其附加到DataTemplate A中某处的ExpanderHeader的父级来实现。您可以使用触发器基于IsExpanded设置此属性。
在DataTemplate B中,使用FindAncestor将Border的CornerRadius绑定到该属性:
<Border CornerRadius="{Binding local:Helper.CornerRadius,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ContentPresenter}} ...
上面的示例假定您已在DataTemplate A中的ContentPresenter上设置了Helper.CornerRadius属性。
答案 1 :(得分:1)
为什么不使用触发器?
<DataTemplate>
<Border CornerRadius="2,2,0,0"
Background="{StaticResource ItemGradient}"
HorizontalAlignment="{Binding HorizontalAlignment,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}},
Mode=OneWayToSource}">
<Border.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding DataTemplateA.IsExpanded}"
Value="True">
<Setter Property="Border.CornerRadius"
Value="2,2,0,0" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<local:ItemContentsUserControl Height="30" />
</Border>
</DataTemplate>
答案 2 :(得分:1)
我找到了解决方案。我将以下代码添加到DataTemplateB的触发器中。它的作用是寻找一个祖先扩展器控件并将CornerRadius属性应用于它。
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}},Path=IsExpanded}" Value="false">
<Setter TargetName="ProjectExpanderHeader" Property="CornerRadius" Value="2,2,2,2"/>
</DataTrigger>
</DataTemplate.Triggers>