获取 WPF Expander 标题的高度

6

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

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

您将如何获取Expander.Header的高度?

2个回答

5
如果您的扩展程序没有模板化,那么它就是一个可视树:
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仅当在代码或XAML中明确设置时才不是double.IsNaN(在XAML中,auto


1
我在 MSDN 论坛上找到的相同内容现在看起来没问题了 :) 你可能也找到了这个链接? :P => http://social.msdn.microsoft.com/Forums/en/wpf/thread/a90b752a-6200-4542-8ec8-29cb902b8aa7 - Elisabeth
不,我没有。只是调查了可视树 - 这是需要了解元素结构的第一步。 - Mykola Bohdiuk

3
我不知道确切的方法(也许可以通过反射实现?),但你可以尝试使用两个展开器。一个只有标题,另一个只有ContentPresenter。你可以将第一个展开器的IsExpanded属性绑定到第二个展开器的IsExpanded属性。这样它们看起来就像是一个展开器。
不过我不确定你想要实现什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接