6

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

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

你会怎么做才能得到 Expander.Header Height ?

4

2 回答 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;

编辑

另外,我想强调 using ActualHeight, not Height,因为Heightis not double.IsNaN(在 XAML 中auto)只有在代码或 XAML 中明确设置时

于 2010-12-25T22:25:50.383 回答
3

我不知道有什么方法可以做到这一点(也许通过反射?),但你可以尝试使用两个扩展器。一个只有一个标题,一个只有一个 ContentPresenter。您可以将第一个扩展器的 IsExpanded 属性绑定到第二个扩展器的 IsExpanded 属性。这将使它们看起来像是一个扩展器。

不过,我不确定您要完成什么。

于 2010-12-25T22:13:55.553 回答