我需要获得WPF Expander.Header的高度,而不是整个Expander只是Header的高度。
没有属性可以获取它,因为Expander.Header + Expander.Content是Expander.Height。
你会怎样做才能获得Expander.Header高度?
答案 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属性。这将使它们看起来像是一个扩展器。
我不确定你到底想要完成什么。