Получить визуальный контент Window - PullRequest
0 голосов
/ 19 ноября 2011

В настоящее время у меня есть эта строка кода, которую я хочу работать в всех случаях:

var visualWindowContent = (UIElement)window.Content;

Этот подход будет работать, когда Window.Content является элементом UIElement. Но что делать, когда это невизуальный объект, к которому затем применяется DataTemplate? Приведенная выше строка кода выдаст неверное исключение. Так как же получить визуальное содержимое окна в этом случае?

РЕДАКТИРОВАТЬ: Сначала я сказал, что VisualTreeHelper.GetChild (window, 0) вернул ноль, но на самом деле это было не ноль. Моя цель здесь - получить корневой слой adorner, передавая visualWindowContent в AdornerLayer.GetAdornerLayer. Оказывается, что это было с ошибкой (возвращало ноль), когда прошло непосредственный визуальный дочерний элемент окна, так как этот узел не был достаточно глубоко в визуальном дереве, то есть потомок AdornerDectorator.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2011

При использовании метода FindVisualChild на странице, связанной с @ReedCopsey, это работает:

var contentPresenter = FindVisualChild<ContentPresenter>( window );
var visualWindowContent = (UIElement)VisualTreeHelper.GetChild( contentPresenter, 0 );
0 голосов
/ 19 ноября 2011

Если вам нужен сам контент, вы можете просто использовать объект:

object visualWindowContent = window.Content;

Это будет работать во всех случаях, поскольку контент будет UIElement или фактически назначенным объектом.

Если вы пытаетесь найти элементы, созданные с помощью шаблона данных, см. Поиск сгенерированных в шаблонах элементов в MSDN для получения информации о параметрах.Это делается путем нахождения ContentPresenter и проверки его ContentTemplate.

...