Получите высоту заголовка расширителя WPF - PullRequest
6 голосов
/ 26 декабря 2010

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

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

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

Ответы [ 2 ]

4 голосов
/ 26 декабря 2010

Если ваш расширитель не шаблонизирован, это визуальное дерево:

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;

Edit

Кроме того, я бы хотел подчеркнуть ActualHeight, а не Height, потому что Height не double.IsNaN (в XAML, auto), только если установлено явно в коде или XAML

3 голосов
/ 26 декабря 2010

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

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

...