Это действительно зависит от приобретения знаний Вашего брата стиля. Многие люди учатся быстрее путем получения их рук грязный & просто войдя в него, кристаллизовав понятия и большое изображение, в то время как они прогрессируют и создают свое знание.
Меня, я предпочитаю запускаться с большого изображения и выполнять развертку в основные элементы. Первая вещь, которую я хотел знать, состояла в том, как все это совмещает тогда всю эту Объектно-ориентированную напыщенность речи, затем о классах & экземпляры и так далее. Мне нравится знать базовые понятия и немного теории, прежде чем я изучу синтаксис. У меня было определенное преимущество, потому что я записал некоторые игры в ОСНОВНЫЕ 20 лет назад, но ничего особенного с тех пор.
, Возможно, это полезно для тени, которую производственный процесс путем запуска с полного программного заявления, затем плана и/или блок-схемы, затем разрабатывает в некоторый псевдо код (склоняющийся к синтаксису, который Вы будете в конечном счете использовать), прежде на самом деле записать код.
золотое правило здесь состоит в том, чтобы разузнать стиль склонности Вашего студента.
Мне показался интересным ваш пример кода, поэтому я попробовал ... но мне пришлось сделать небольшую модификацию, чтобы он правильно работал в моем материале.
Мне пришлось изменить код 2-е «if» в методе HitTestFilter, как показано ниже:
if (element == null || element.IsHitTestVisible)
Как видите, я удалил бесполезный элемент «element! = This» в конце (вы уже тестировали это условие в 1-м «if») и добавил «element = = null "в начале.
Почему? Поскольку в какой-то момент во время фильтрации тип параметра был System.Windows.Media.ContainerVisual, который не наследуется от UIElement, и поэтому element будет иметь значение null, а ContinueSkipSelfAndChildren будет возвращен. Но я не хочу пропускать дочерние элементы, потому что мой холст содержится внутри его дочерних элементов.
Я думаю, что вы должны использовать события предварительного просмотра, потому что это RoutingStrategy.Tunnel от Window к самому высокому контролю в Z-Order, а обычными событиями являются RoutingStrategy.Bubble.
В этом RoutedEvents есть свойство Handle, когда это правда, система остановится, чтобы пройти по визуальному дереву, потому что кто-то использовал это событие.
Как и говорил @GuerreroTook, для решения этой проблемы следует использовать RoutedEvents от WPF (подробнее см. здесь .