获得WPF扩展器头的高度

时间:2010-12-25 21:57:46

标签: wpf header height expander

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

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

你会怎样做才能获得Expander.Header高度?

2 个答案:

答案 0 :(得分:4)

如果你的扩展器没有模板化,那就是一棵Visual树:

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中明确设置

答案 1 :(得分:3)

我不知道如何确切地这样做(可能通过反射?),但你可以尝试使用两个扩展器。一个只有一个标题,一个只有一个ContentPresenter。您可以将第一个扩展器的IsExpanded属性绑定到第二个扩展器的IsExpanded属性。这将使它们看起来像是一个扩展器。

我不确定你到底想要完成什么。