我需要获取 WPF Expander.Header 的高度,而不是整个 Expander 只是标题的高度。
没有属性可以得到它,因为 Expander.Header + Expander.Content 是 Expander.Height。
你会怎么做才能得到 Expander.Header Height ?
如果您的扩展器没有模板化,那就是一个可视化树:
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;
编辑
另外,我想强调 using ActualHeight
, not Height
,因为Height
is not double.IsNaN
(在 XAML 中auto
)只有在代码或 XAML 中明确设置时
我不知道有什么方法可以做到这一点(也许通过反射?),但你可以尝试使用两个扩展器。一个只有一个标题,一个只有一个 ContentPresenter。您可以将第一个扩展器的 IsExpanded 属性绑定到第二个扩展器的 IsExpanded 属性。这将使它们看起来像是一个扩展器。
不过,我不确定您要完成什么。