В моем приложении UWP есть шаблонный элемент управления, который отвечает на событие PointerReleased. Этот шаблонный элемент управления вложен в другие экземпляры элемента управления. Таким образом, CustomContentControl принадлежит CustomContentControl, который принадлежит CustomContentControl ... и так далее. Это событие всплывает, и важно, чтобы элемент управления всплывал, но одна строка кода должна выполняться только для элемента управления, на который я нажал.
Мне нужен обработчик событий для условного запуска строки кода только , если это элемент управления, на который я нажал. Я думал, что смогу сравнить объект отправителя с исходным источником.
Проблема в том, что когда я пытаюсь получить event.OriginalSource
(событие является объектом PointerRoutedEventArgs
), он не возвращает пользовательский элемент управления, а скорее часть шаблона, использованного для создания этого элемента управления. Я попытался выполнить такой поиск, чтобы найти родителя (в надежде найти мой CustomContentControl), например так ...
// test to see if template part belongs to a CustomContentControl
var test = (FrameworkElement)e.OriginalSource;
var found = false; var tryAgain = 0;
while (!found && tryAgain < 3) { //try 3 times and then quit
if (test.Parent as CustomContentControl == null) {
test = (FrameworkElement)test.Parent; tryAgain++;
Debug.WriteLine(test.Name);
} else {
found = true;
// do something with CustomContentControl ...
}
}
... но к тому времени, когда цикл поднимается выше по иерархии, ближе к CustomContentControl, test
становится нулевым (я не могу найти конкретный элемент управления, к которому он принадлежит)
Я застрял. Мой вопрос: как мне запустить строку кода только , если я нажал на элемент управления?