1 (& 4): перенаправленные события либо всплывают, либо туннелируют вниз по визуальному дереву. И если кто-то установит «Handled = true» в аргументах события по пути, то это не пойдет дальше. Дело в том, что вы не знаете, кто в визуальном дереве получит событие click (например, кнопка может содержать StackPanel с изображением и TextBlock ... при нажатии кнопки событие может перейти к любому из этих ), но с механизмом Routed Event у вас есть весь контроль над тем, кто должен обрабатывать событие. Соглашение состоит в том, что у туннельных событий есть имена с префиксом Preview (например, PreviewMouseDown - это туннельная версия события всплывающего сообщения MouseDown).
2: Особенность свойств зависимостей заключается в том, что они на самом деле «не имеют» значения - значение в любой точке «зависит» от различных других факторов (таких как любые стили, триггеры, значения по умолчанию и т. Д.). Когда существует несколько из этих факторов, существует порядок приоритета, который определяет, какое значение будет использовано ... см. Здесь . Это позволяет легко изменить отображение элемента (например, когда мышь находится над ним), а затем изменить его обратно на то, что было раньше, например, когда мышь больше не находится над ним. Значения для свойства зависимости также могут быть унаследованы от предка, что действительно полезно для таких вещей, как DataContext. Таким образом, вы можете установить DataContext элемента, и все его дочерние элементы будут иметь к нему доступ.
3: вложенные свойства позволяют дочернему элементу сохранять значение, связанное со свойством предка. Как и в примере, который вы даете, свойство 'left' принадлежит родительскому элементу кнопки canvas. Присоединенные свойства означают, что несколько дочерних элементов могут хранить разные значения для одного и того же свойства у предка.
Надеюсь, это поможет ... продолжайте копать и задавать вопросы - стоит подумать об этом!