C# WPF19 июля

C# WPf как получить код нажатой клавиши

В данном примере при нажатии любой клавиши вызовется метод  IsAllowedInput в котрый в качестве параметра TextCompositionEventArgs e будет передана в том числе нажатая клавиша 

В C# WPf получить код нажатой клавиши - это целая проблема так как в WPF, в отличие от Forms, нет интерфейса реализующего эту задачу.

Для получения WPF кода нажатой клавиши можно использовать событие PreviewTextInput. 

Для получения параметров события PreviewTextInput можно использовать триггер взаимодействия WPF CallMethodAction, который реализует непосредственный вызов метода в коде.

Пример кода разметки XAML View

Данный пример реализует триггер взаимодействия:
на событие EventName="PreviewTextInput" 
с биндингом к данному TextBox TargetObject="{Binding}"
с вызовом метода в коде   MethodName="IsAllowedInput"></b:CallMethodAction>

<TextBox x:Name="myTextBox03" Style="{StaticResource BaseTextBoxStyle}">
    <i:Interaction.Triggers>
          <i:EventTrigger EventName="PreviewTextInput">
                <b:CallMethodAction TargetObject="{Binding}"
                                                MethodName="IsAllowedInput">

                </b:CallMethodAction>
            </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>


Пример кода принимающей вызов метода ViewModel

public void IsAllowedInput(object sender, TextCompositionEventArgs e)
{
//...
}

<b:CallMethodAction> - это расширение разметки XAML, используемое в фреймворке Microsoft Blend. Оно обычно применяется для вызова метода на определенном объекте в ответ на определенное событие.  <b:CallMethodAction> используется как часть триггера взаимодействия в файле XAML. Триггер взаимодействия устанавливается на элемент, который генерирует событие PreviewTextInput. Когда событие происходит, будет вызван метод IsAllowedInput на объекте, к которому привязан этот триггер.

Реализация  PreviewTextInput с вызовом CallMethodAction обеспечит вызов метода IsAllowedInput непосрественно в коде без использования DelegateCommand.

В полученных параметрах метода  IsAllowedInput(object sender, TextCompositionEventArgs e) можно получить:

  • в  sender - параметры объекта, в нашем случае TextBox
  • в  e - параметры события PreviewTextInput, в нашем случае нам интересна нажатая клавиша

После получения из e значение нажатой клавиши ваш код может реализовать обрабоку нажатой клавиши. 

 

Если EventName="PreviewTextInput" не срабатывает установите PassEventArgsToCommand="True" 

 

Как это работает

Пример кода разметки XAML View

<TextBox x:Name="myTextBox03">
    <i:Interaction.Triggers>
          <i:EventTrigger EventName="PreviewTextInput">
                <b:CallMethodAction TargetObject="{Binding}"
                                                    MethodName="IsAllowedInput"></b:CallMethodAction>
            </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>

В этом XAML-коде определен элемент управления TextBox с именем "myTextBox03". Внутри элемента TextBox есть триггер взаимодействия, который реагирует на событие PreviewTextInput. При возникновении этого события будет вызван метод "IsAllowedInput" на объекте, к которому привязан текущий контекст данных (DataContext).

Давайте разберем, как это работает:

  1. <TextBox x:Name="myTextBox03">: Создается элемент управления TextBox с именем "myTextBox03". Здесь не указан стиль, поэтому будет использоваться стандартный стиль для TextBox.

  2. <i:Interaction.Triggers>: Это контейнер для триггеров взаимодействия (Interaction Triggers). Здесь определен триггер для обработки события.

  3. <i:EventTrigger EventName="PreviewTextInput">: Определен триггер события PreviewTextInput, который возникает, когда пользователь вводит текст в элемент TextBox.

  4. <b:CallMethodAction TargetObject="{Binding}" MethodName="IsAllowedInput"></b:CallMethodAction>: Это действие вызова метода. Когда событие PreviewTextInput возникает в TextBox, будет выполнен метод "IsAllowedInput" на объекте, к которому привязан текущий контекст данных (DataContext). Обратите внимание, что <b:CallMethodAction> является пользовательским элементом управления, и его поведение определяется соответствующей реализацией.

Важно убедиться, что контекст данных (DataContext) этого XAML-фрагмента связан с объектом, который имеет метод "IsAllowedInput". Когда событие PreviewTextInput происходит в TextBox, триггер взаимодействия срабатывает, и вызывается метод "IsAllowedInput" на объекте DataContext.

Таким образом, этот код обеспечивает связь между событием PreviewTextInput в элементе TextBox и методом "IsAllowedInput" в коде, который должен выполнять определенные действия при вводе текста пользователем.

Теги: #с#, #wpf

Комментарии

Добавить комментарий:

Отметьте что вы не робот

Вернуться наверх