获取 WPF 扩展器标题的高度
Posted
技术标签:
【中文标题】获取 WPF 扩展器标题的高度【英文标题】:Get the Height of the WPF Expander Header 【发布时间】:2011-05-30 17:33:07 【问题描述】:我需要获取 WPF Expander.Header 的高度,而不是整个 Expander 只是 Header 的高度。
没有属性可以获取,因为 Expander.Header + Expander.Content 就是 Expander.Height。
你会怎么做才能得到 Expander.Header Height ?
【问题讨论】:
【参考方案1】:我不知道有什么方法可以做到这一点(也许通过反射?),但您可以尝试使用两个扩展器。一个只有一个标题,一个只有一个 ContentPresenter。您可以将第一个扩展器的 IsExpanded 属性绑定到第二个扩展器的 IsExpanded 属性。这会使它们看起来是一个单独的扩展器。
不过,我不确定你想要完成什么。
【讨论】:
【参考方案2】:如果您的扩展器没有模板化,那就是可视化树:
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 中明确设置时
【讨论】:
我在 msdn 论坛上找到的一样,现在看起来没问题 :) 你也找到了这个链接吗? :P => social.msdn.microsoft.com/Forums/en/wpf/thread/… 不,我没有。刚刚研究了可视化树——当需要一些关于元素结构的信息时,这是我首先要做的以上是关于获取 WPF 扩展器标题的高度的主要内容,如果未能解决你的问题,请参考以下文章