WPF DataTemplate 触发器在不同的 DataTemplate 中设置属性
我有 2 个 DataTemplate(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 的 IsExpanded
属性时,是否可以设置 B 的 Border
的 CornerRadius
Expander
设置为 true?
提前致谢。
I have 2 DataTemplate
s (A & B). A contains an Expander
and the expander's HeaderTemplate
is pointed at another DataTemplate
(B).
DataTemplate
B is shown below:
<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>
Is it possible to set the CornerRadius
of B's Border
when the IsExpanded
property of A's Expander
is set to true?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以通过引入 CornerRadius 类型的新附加属性(例如 Helper.CornerRadiusProperty)并将其附加到 DataTemplate A 中某处 ExpanderHeader 的父级来完成此操作。您可以使用触发器根据 IsExpanded 设置此属性。
在 DataTemplate B 中,使用 FindAncestor 将 Border 的 CornerRadius 绑定到该属性:
上面的示例假设您已在 DataTemplate A 中的 ContentPresenter 上设置了 Helper.CornerRadius 属性。
You could do this by introducing a new attched property of type CornerRadius (e.g. Helper.CornerRadiusProperty) and attach it to a parent of your ExpanderHeader somewhere in DataTemplate A. You set this property based on IsExpanded using a trigger.
In your DataTemplate B you bind the CornerRadius of your Border to that property using FindAncestor:
The above example assumes that you have set the Helper.CornerRadius property on a ContentPresenter in DataTemplate A.
我找到了我的解决方案。我将以下代码添加到 DataTemplateB 的触发器中。它的作用是查找祖先扩展器控件并将 CornerRadius 属性应用于它。
I found my solution. I added the following code to DataTemplateB's Triggers. What it does is look for an ancestor expander control and applies the CornerRadius property to it.
为什么不使用触发器?
Why not using the triggers ?