获得WPF扩展器头的高度

Eli*_*eth 6 wpf height header expander

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

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

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

Myk*_*iuk 5

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

Expander { Border { DockPanel { ToggleButton, ContentPresenter {...} } } }
Run Code Online (Sandbox Code Playgroud)

你所需要的只是获得那个 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;
Run Code Online (Sandbox Code Playgroud)

编辑

另外,我想强调使用ActualHeight, not Height,因为Heightis not double.IsNaN(in XAML, auto) 仅当在代码或 XAML 中显式设置时