获取 WPF 扩展器标题的高度

Posted

技术标签:

【中文标题】获取 WPF 扩展器标题的高度【英文标题】:Get the Height of the WPF Expander Header 【发布时间】:2011-05-30 17:33:07 【问题描述】:

我需要获取 WPF Expander.Header 的高度,而不是整个 Expander 只是 Header 的高度。

没有属性可以获取,因为 Expander.Header + Expander.Content 就是 Expander.Height。

你会怎么做才能得到 Expander.Header Height ?

【问题讨论】:

【参考方案1】:

我不知道有什么方法可以做到这一点(也许通过反射?),但您可以尝试使用两个扩展器。一个只有一个标题,一个只有一个 ContentPresenter。您可以将第一个扩展器的 IsExpanded 属性绑定到第二个扩展器的 IsExpanded 属性。这会使它们看起来是一个单独的扩展器。

不过,我不确定你想要完成什么。

【讨论】:

【参考方案2】:

如果您的扩展器没有模板化,那就是可视化树:

Expander  Border  DockPanel  ToggleButton, ContentPresenter ...   

您只需要获得那个 ToggleButton。使用VisualTreeHelper 很容易:

var border = VisualTreeHelper.GetChild(expander, 0);
var dockpanel = VisualTreeHelper.GetChild(border, 0);
var togglebutton = VisualTreeHelper.GetChild(dockpanel, /*0*/); // it may be not 0th, so please enumerate all children using VisualTreeHelper.GetChildrenCount(dockpanel) and find that ToggleButton
return togglebutton.ActualHeight;

编辑

另外,我想强调使用ActualHeight,而不是Height,因为Height 不是double.IsNaN(在XAML 中,auto)只有在代码或XAML 中明确设置时

【讨论】:

我在 msdn 论坛上找到的一样,现在看起来没问题 :) 你也找到了这个链接吗? :P => social.msdn.microsoft.com/Forums/en/wpf/thread/… 不,我没有。刚刚研究了可视化树——当需要一些关于元素结构的信息时,这是我首先要做的

以上是关于获取 WPF 扩展器标题的高度的主要内容,如果未能解决你的问题,请参考以下文章

如何单击折叠的 WPF 扩展器后面的内容?

WPF扩展器单击事件上的展开/折叠网格列

当列表视图中的扩展器折叠时,无法让 WPF 列表视图折叠

选择时如何让wpf listboxitem拉伸列表框的整个高度

如何在WPF中设置小扩展头和扩展内容?

C# WPF - 顶部和底部停靠但可扩展的中间部分