Получите высоту заголовка расширителя 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 второго. Это сделало бы их похожими на одного экспандера.
Я не уверен, что именно вы пытаетесь достичь, хотя.