Пример пользовательского шаблона команды WPF

Для этого конкретного примера, где есть два варианта, вы можете использовать:

If Target.Address = "$E$22" OR Target.Address = "$B$22" Then

Если у вас есть больше, посмотрите на использование выражения CASE:

Select Case Target.Address
    Case "$E$22"
        'Do Something
    Case "$B$22"
        'Do Something Else
End Select

Поместите в столько, сколько вам нужно, если вам нужно что-то сделать, если оно не соответствует ни одному из критериев, сделайте ваш последний случай за Case Else до конца, выберите

36
задан sig 2 March 2016 в 07:29
поделиться

4 ответа

А-ч ха! Вопрос я могу ответить! Во-первых, я должен упомянуть, что лично нашел легче определить и поднять трубку команды в коде, а не в XAML. Это позволяет мне поднимать трубку обработчики для команд немного более гибко, чем весь подход XAML.

необходимо разработать то, что управляет, чтобы Вы хотели иметь и чего они касаются. В моем приложении у меня в настоящее время есть класс для определения команд важного приложения как так:

public static class CommandBank
{
  /// Command definition for Closing a window
  public static RoutedUICommand CloseWindow { get; private set; }

  /// Static private constructor, sets up all application wide commands.
  static CommandBank()
  {
    CloseWindow = new RoutedUICommand();
    CloseWindow.InputGestures.Add(new KeyGesture(Key.F4, ModifierKeys.Alt));
    // ...
  }

Теперь, потому что я хотел сохранить код, к которому все вместе, с помощью кода только приближаются к Командам, позволяет мне поместить следующие методы в класс выше:

/// Closes the window provided as a parameter
public static void CloseWindowExecute(object sender, ExecutedRoutedEventArgs e)
{
  ((Window)e.Parameter).Close();
}

/// Allows a Command to execute if the CommandParameter is not a null value
public static void CanExecuteIfParameterIsNotNull(object sender, CanExecuteRoutedEventArgs e)
{
  e.CanExecute = e.Parameter != null;
  e.Handled = true;
}

второй метод там может даже быть совместно использован с другими Командами без меня имеющий необходимость повторить все это по месту.

, Как только Вы определили команды как это, можно добавить их к любой части UI. В следующем, когда-то Окно Загрузилось, я добавляю привязку команды и к Окну и к MenuItem и затем добавляю входную привязку к Окну с помощью цикла, чтобы сделать это для всей привязки команды. Параметром, который передается, является Окно сам, таким образом, код выше знает что Окно попытаться закрыться.

public partial class SimpleWindow : Window
{
  private void WindowLoaded(object sender, RoutedEventArgs e)
  {
    // ...
    this.CommandBindings.Add(
      new CommandBinding(
        CommandBank.CloseWindow,
        CommandBank.CloseWindowExecute,
        CommandBank.CanExecuteIfParameterIsNotNull));

    foreach (CommandBinding binding in this.CommandBindings)
    {
       RoutedCommand command = (RoutedCommand)binding.Command;
       if (command.InputGestures.Count > 0)
       {
         foreach (InputGesture gesture in command.InputGestures)
         {
           var iBind = new InputBinding(command, gesture);
           iBind.CommandParameter = this;
           this.InputBindings.Add(iBind);
         }
       }
    }

    // menuItemExit is defined in XAML
    menuItemExit.Command = CommandBank.CloseWindow;
    menuItemExit.CommandParameter = this;
    // ...
  }

  // ....
}

у меня тогда также позже есть обработчики событий для событий WindowClosing и WindowClosed, я действительно рекомендую сделать фактическую реализацию из команд максимально маленькой и универсальной. Как в этом случае, я не пытался поместить код, который пытается остановить закрытие Окна, если существуют несохраненные данные, я сохранил тот код твердо в событии WindowClosing.

Сообщенный мне, если Вы имеете, любой развивает вопросы.:)

38
ответ дан Drew Noakes 27 November 2019 в 06:02
поделиться

В выпуске в сентябре 2008 MSDN Magazine у Brian Noyes есть превосходная статья о RoutedCommand/RoutedEvents!!!

Вот ссылка: http://msdn.microsoft.com/en-us/magazine/cc785480.aspx

4
ответ дан rudigrobler 27 November 2019 в 06:02
поделиться

Вещь о XAML состоит в том, что он хорошо для 'простых' программ, но к сожалению, он не работает хорошо, когда Вы хотите сделать вещи как функции доли. Скажите, что у Вас есть несколько классов и UI, все из которых имели команды, которые никогда не отключались, необходимо будет записать метод 'CanAlwaysExecute' для каждого Окна или UserControl! Это просто не очень DRY.

прочитавший несколько блогов и посредством попытки нескольких вещей, я сделал выбор для создания XAML просто о взглядах, стилях, анимации и триггерах. Все мое присоединение обработчиков событий и управление теперь снижаются в коде - позади.:)

Другой глюк между прочим Вводится, связывая для них, чтобы быть пойманным, фокус должен быть на объекте, который содержит Входную привязку. Например, для имения короткого пути можно использовать в любое время (скажите, F1 для открытия справки), что входная привязка должна быть установлена на Объекте окна, так как тот всегда фокусируется, когда приложение Активно. Используя код метод должен сделать это легче, даже когда Вы начинаете использовать UserControls, который мог бы хотеть добавить входную привязку к их родительскому Окну.

3
ответ дан Nidonocu 27 November 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: