Получите высоту заголовка расширителя WPF

Мне нужно получить Высота WPF Expander.Header, а не весь Expander, только Высота Заголовка.

Нет свойства, чтобы получить его, потому что Expander.Header + Expander.Content является Expander.Height.

Что бы вы сделали, чтобы получить Expander.Header Height?

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

Я не знаю, как сделать это точно (возможно, с помощью рефлексии?), Но вы можете попробовать использовать два экспандера. Один только с заголовком, а другой только с ContentPresenter. Вы можете связать свойство IsExpanded первого экспандера со свойством IsExpanded второго. Это сделало бы их похожими на одного экспандера.

Я не уверен, что именно вы пытаетесь достичь, хотя.

Другие вопросы по тегам