Не удается найти родителя шаблонного элемента управления по типу (!) (Wpf) - PullRequest
5 голосов
/ 02 декабря 2010

В моем проекте WPF у меня немного сложное управление.В проекте я использую только элементы управления (они все шаблонные), кроме MainWindow.

На одном экране у меня есть следующий макет (для отображения макета после применения шаблонов и заполнения содержимого):

MyScreenControl-MyTableControl--ItemsControl--- HeaderItemsControl----- HeaderItemsControl.Header------ MyHeaderControl----- HeaderItemsControl.Items------ MyItemControl------ MyItemControl------ MyItemControl...

Когда я нахожусь в файле кода ScreenControl, в методе OnMouseLeftButtonDown я хотел бы определить, произошло ли событие click из MyHeaderControl или MyItemControl.

Источник MouseButtonEventArgs - это ScreenControl иOriginalSource - это TextBlock в шаблоне MyItemControl / MyHeaderControl.

Моя первая попытка найти MyItemControl / MyHeaderControl состояла в том, чтобы начать с OriginalSource и рекурсивно посмотреть на тип свойства Parent.Он работает нормально, пока я не доберусь до корня шаблона (в данном случае это ViewBox), но у корня нет родительского элемента.

Я использовал такой метод в моем предыдущем проекте azи это сработало, но тогда я работал с UserControls, а не с Controls или с шаблонами.

Есть идеи, как мне подойти к этой проблеме (хорошая идея также хороша, как и код)?

спасибо, Теншико

Ответы [ 2 ]

5 голосов
/ 02 декабря 2010

Вы пытались просто получить шаблонный родительский источник?:

Control originalSource = e.OriginalSource;

MyItemControl myItemControl = originalSource.TemplatedParent as MyItemControl;
MyHeaderControl myHeaderControl = originalSource.TemplatedParent as MyHeaderControl;

if (MyItemControl != null) ....
else if (MyHeaderControl != null) ....

(см .: http://msdn.microsoft.com/en-gb/library/system.windows.frameworkelement.templatedparent.aspx)

2 голосов
/ 02 декабря 2010

Извлечение VisualTreeHelper.GetParent , которое позволит вам пройтись по визуальному дереву, где элементы управления фактически были созданы с помощью шаблона.

...