Обработчики событий в XAML или Code Behind - PullRequest
7 голосов
/ 14 января 2010

Я новичок в Silverlight и XAML. Пытаясь изучить синтаксис и лучшие практики, я продолжаю сталкиваться с расхождением (или, по крайней мере, мне так кажется) в способе реализации обработчиков событий.

В примере из MSDN я вижу следующий используемый код:

<UserControl x:Class="DragAndDropSimple.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
  <Canvas x:Name="rootCanvas"
  Width="640"
  Height="480"
  Background="Gray"
  >
    <!-- You can drag this rectangle around the canvas. -->
    <Rectangle
    MouseLeftButtonDown="Handle_MouseDown"
    MouseMove="Handle_MouseMove"
    MouseLeftButtonUp="Handle_MouseUp"
    Canvas.Left="30" Canvas.Top="30" Fill="Red"
    Width="50" Height="50" />
  </Canvas>

</UserControl>

Там, где установлены обработчики мыши, в другом коде Я видел этот метод, использованный в следующем коде:

 public Window1()
        {
            InitializeComponent();

            TransformGroup group = new TransformGroup();

            ScaleTransform xform = new ScaleTransform();
            group.Children.Add(xform);

            TranslateTransform tt = new TranslateTransform();
            group.Children.Add(tt);

            image.RenderTransform = group;

            image.MouseWheel += image_MouseWheel;
            image.MouseLeftButtonDown += image_MouseLeftButtonDown;
            image.MouseLeftButtonUp += image_MouseLeftButtonUp;
            image.MouseMove += image_MouseMove;
        }

Я бы предположил, что пример на MSDN - рекомендуемый способ, однако мне больше нравится второй способ.

Есть ли лучшая практика для этой ситуации?

Ответы [ 4 ]

4 голосов
/ 14 января 2010

В первом подходе есть два «кодовых сайта»

  1. XAML, где определены элементы пользовательского интерфейса и события связаны в одном месте.
  2. Процедуры обработчика событий в коде

Во втором есть 3 "кодовых сайта"

  1. XAML, где определены элементы пользовательского интерфейса
  2. конструктор, в котором связаны события
  3. Процедуры обработчика событий в коде

Лично я предпочитаю первый подход. Если я удаляю элемент, мне нужно только найти обработчики событий, которые нужно удалить, тогда мне не нужно также редактировать конструктор класса.

Конечно, это эмпирическое правило, будет много исключений.

4 голосов
/ 14 января 2010

Если мне не нужно динамически изменять обработчики событий для объекта, я предпочитаю определять его в самом XAML.

2 голосов
/ 14 января 2010

Рекомендация: используйте MVVM и замените ICommands на обработчики событий.

Кроме этого, не существует "наилучшей практики" для декларативной установки обработчиков событий в xaml или с помощью кода в конструкторах. Это до вас.

Однако я думаю, что большинство людей ожидают увидеть объявления в xaml, поскольку именно здесь вы разрабатываете пользовательский интерфейс.

0 голосов
/ 18 января 2013

Для чего стоит, если вы пытаетесь назначить xaml шаблону через строку, обработчики событий не будут работать ... Смотрите пост:

Обработчики событий при использовании строки в качестве шаблона данных для формы данных в Silverlight

...