获取 WPF 扩展器标头的高度

发布于 2024-10-09 15:14:22 字数 175 浏览 4 评论 0原文

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

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

您将如何获取 Expander.Header Height ?

I need to get the Height of the WPF Expander.Header, not the whole Expander just the Height of the Header.

There is no property to get it because the Expander.Header + Expander.Content is the Expander.Height.

What would you do to get the Expander.Header Height ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晨曦慕雪 2024-10-16 15:14:22

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

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,因为仅当在代码或 XAML 中显式设置时,Height 才不是 double.IsNaN(在 XAML 中为 auto

If your expander isn't templated, that's a Visual tree:

Expander { Border { DockPanel { ToggleButton, ContentPresenter {...} } } }

All you need is to get that ToggleButton. It's easy using 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;

Edit

Also, I'd like to accent on using ActualHeight, not Height, because Height is not double.IsNaN (in XAML, auto) only if set explicitly in code or XAML

揽月 2024-10-16 15:14:22

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

我不确定你到底想实现什么目标。

I don't know of a way to do that exactly (maybe through reflection?), but you could try using two expanders. One with just a header and one with just a ContentPresenter. You could bind the IsExpanded property of the first expander to the IsExpanded property of the second one. This would make them appear to be a single expander.

I'm not sure exactly what you're trying to accomplish though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文