Некоторые сомнения в WPF - PullRequest
       1

Некоторые сомнения в WPF

3 голосов
/ 23 марта 2010

Я совершенно новичок в WPF. Хотя я прохожу учебники и статьи из сети, но у меня есть сомнения. Некоторые из вопросов, которые вычеркнуты до сих пор:

  1. Что такое перенаправленные события и что дополнительно делает сервер?

  2. Что такое свойства зависимостей и их преимущества.

  3. Как свойства зависимостей отличаются от прикрепленных свойств.

  4. Почему сначала происходит пузырение, а затем туннелирование? И какова цель этого?

например.

<canvas>
   <button canvas.left=10/> 
</canvas>

Это свойство зависимости или присоединенное свойство?

Спасибо

Ответы [ 2 ]

2 голосов
/ 23 марта 2010
  1. Маршрутизируемое событие - это событие, предназначенное для дерева элементов, когда при возникновении перенаправленного события оно может перемещаться вверх (пузыриться) и вниз (туннелировать) дерева элементов. Например, если у вас есть кнопка внутри сетки, и вы нажимаете кнопку, чтобы маршрут мог поднять дерево до сетки.
  2. Свойство зависимости - это другой тип свойства, которое может уведомлять об изменении своего значения, а также наследовать и поддерживать несколько поставщиков.
  3. Присоединенное свойство - это еще одна форма свойства зависимости, которое можно прикрепить к любому виду объекта. Как у меня медленно, TextBlock.FontSize прикреплено свойство

    <Canvas TextBlock.FontSize="10"> <TextBlock Text="Test" /> </Canvas>

  4. Пузырьки предназначены для события * _Changing, а туннелирование - для события * _Changed. Поэтому, если вам нужно что-то проверить и обработать, вы должны использовать событие * _Changing, если вы проверяете событие * _Changed, вы не можете его обработать (отменить).

  5. В вашем примере прикреплено свойство.
1 голос
/ 23 марта 2010

1 (& 4): перенаправленные события либо всплывают, либо туннелируют вниз по визуальному дереву. И если кто-то установит «Handled = true» в аргументах события по пути, то это не пойдет дальше. Дело в том, что вы не знаете, кто в визуальном дереве получит событие click (например, кнопка может содержать StackPanel с изображением и TextBlock ... при нажатии кнопки событие может перейти к любому из этих ), но с механизмом Routed Event у вас есть весь контроль над тем, кто должен обрабатывать событие. Соглашение состоит в том, что у туннельных событий есть имена с префиксом Preview (например, PreviewMouseDown - это туннельная версия события всплывающего сообщения MouseDown).

2: Особенность свойств зависимостей заключается в том, что они на самом деле «не имеют» значения - значение в любой точке «зависит» от различных других факторов (таких как любые стили, триггеры, значения по умолчанию и т. Д.). Когда существует несколько из этих факторов, существует порядок приоритета, который определяет, какое значение будет использовано ... см. Здесь . Это позволяет легко изменить отображение элемента (например, когда мышь находится над ним), а затем изменить его обратно на то, что было раньше, например, когда мышь больше не находится над ним. Значения для свойства зависимости также могут быть унаследованы от предка, что действительно полезно для таких вещей, как DataContext. Таким образом, вы можете установить DataContext элемента, и все его дочерние элементы будут иметь к нему доступ.

3: вложенные свойства позволяют дочернему элементу сохранять значение, связанное со свойством предка. Как и в примере, который вы даете, свойство 'left' принадлежит родительскому элементу кнопки canvas. Присоединенные свойства означают, что несколько дочерних элементов могут хранить разные значения для одного и того же свойства у предка.

Надеюсь, это поможет ... продолжайте копать и задавать вопросы - стоит подумать об этом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...