InputBinding Класс

Определение

Представляет привязку между InputGesture и командой. Этой командой потенциально является RoutedCommand.

public ref class InputBinding : System::Windows::DependencyObject, System::Windows::Input::ICommandSource
public ref class InputBinding : System::Windows::Freezable, System::Windows::Input::ICommandSource
public class InputBinding : System.Windows.DependencyObject, System.Windows.Input.ICommandSource
public class InputBinding : System.Windows.Freezable, System.Windows.Input.ICommandSource
type InputBinding = class
    inherit DependencyObject
    interface ICommandSource
type InputBinding = class
    inherit Freezable
    interface ICommandSource
Public Class InputBinding
Inherits DependencyObject
Implements ICommandSource
Public Class InputBinding
Inherits Freezable
Implements ICommandSource
Наследование
Наследование
Производный
Реализации

Примеры

В следующем примере показано, как использовать KeyBinding для привязки KeyGesture к команде Open . При выполнении ключевого жеста вызывается команда Открыть.

<Window.InputBindings>
  <KeyBinding Key="B"
              Modifiers="Control" 
              Command="ApplicationCommands.Open" />
</Window.InputBindings>

В следующих примерах показано, как привязать пользовательскую команду к InputBinding объектам . В этих примерах создается приложение, которое позволяет пользователю изменять цвет фона, выполняя одно из следующих действий:

  • Нажатие кнопки.

  • Нажмите клавиши CTRL+C.

  • Щелчок правой кнопкой StackPanel мыши (за пределами ListBox).

В первом примере создается класс с именем SimpleDelegateCommand. Этот класс принимает делегат, чтобы объект, создающий команду, смог определить действие, выполняемое при выполнении команды. SimpleDelegateCommand также определяет свойства, указывающие, какой ввод клавиши и мыши вызывает команду. GestureKey и GestureModifier задает ввод с клавиатуры; MouseGesture указывает ввод с помощью мыши.

 // Create a class that implements ICommand and accepts a delegate.
public class SimpleDelegateCommand : ICommand
{
    // Specify the keys and mouse actions that invoke the command. 
    public Key GestureKey { get; set; }
    public ModifierKeys GestureModifier { get; set; }
    public MouseAction MouseGesture { get; set; }

    Action<object> _executeDelegate;

    public SimpleDelegateCommand(Action<object> executeDelegate)
    {
        _executeDelegate = executeDelegate;
    }

    public void Execute(object parameter)
    {
        _executeDelegate(parameter);
    }

    public bool CanExecute(object parameter) { return true; }
    public event EventHandler CanExecuteChanged;
}
' Create a class that implements ICommand and accepts a delegate. 
Public Class SimpleDelegateCommand
    Implements ICommand

    ' Specify the keys and mouse actions that invoke the command. 
    Private _GestureKey As Key
    Private _GestureModifier As ModifierKeys
    Private _MouseGesture As MouseAction

    Public Property GestureKey() As Key
        Get
            Return _GestureKey
        End Get
        Set(ByVal value As Key)
            _GestureKey = value
        End Set
    End Property

    Public Property GestureModifier() As ModifierKeys
        Get
            Return _GestureModifier
        End Get
        Set(ByVal value As ModifierKeys)
            _GestureModifier = value
        End Set
    End Property

    Public Property MouseGesture() As MouseAction
        Get
            Return _MouseGesture
        End Get
        Set(ByVal value As MouseAction)
            _MouseGesture = value
        End Set
    End Property

    Private _executeDelegate As Action(Of Object)

    Public Sub New(ByVal executeDelegate As Action(Of Object))
        _executeDelegate = executeDelegate
    End Sub

    Public Sub Execute(ByVal parameter As Object) _
        Implements ICommand.Execute

        _executeDelegate(parameter)
    End Sub

    Public Function CanExecute(ByVal parameter As Object) As Boolean _
        Implements ICommand.CanExecute

        Return True
    End Function

    Public Event CanExecuteChanged As EventHandler _
        Implements ICommand.CanExecuteChanged
End Class

В следующем примере создается и инициализируется ColorChangeCommandобъект , который является SimpleDelegateCommand. В примере также определяется метод , который выполняется при вызове команды и задает GestureKeyсвойства , GestureModifierи MouseGesture . Приложение вызывает InitializeCommand метод при запуске программы, например в конструкторе Window.

public SimpleDelegateCommand ChangeColorCommand
{
    get { return changeColorCommand; }
}

private SimpleDelegateCommand changeColorCommand;

private void InitializeCommand()
{
    originalColor = this.Background;

    changeColorCommand = new SimpleDelegateCommand(x => this.ChangeColor(x));

    DataContext = this;
    changeColorCommand.GestureKey = Key.C;
    changeColorCommand.GestureModifier = ModifierKeys.Control;
    ChangeColorCommand.MouseGesture = MouseAction.RightClick;
}

private Brush originalColor, alternateColor;

// Switch the Background color between
// the original and selected color.
private void ChangeColor(object colorString)
{
    if (colorString == null)
    {
        return;
    }

    Color newColor = 
        (Color)ColorConverter.ConvertFromString((String)colorString);
    
    alternateColor = new SolidColorBrush(newColor);

    if (this.Background == originalColor)
    {
        this.Background = alternateColor;
    }
    else
    {
        this.Background = originalColor;
    }
}
Public ReadOnly Property ChangeColorCommand() As SimpleDelegateCommand
    Get
        Return _changeColorCommand
    End Get
End Property

Private _changeColorCommand As SimpleDelegateCommand
Private originalColor As Brush, alternateColor As Brush

Private Sub InitializeCommand()
    originalColor = Me.Background

    _changeColorCommand = New SimpleDelegateCommand(Function(x) Me.ChangeColor(x))

    DataContext = Me
    _changeColorCommand.GestureKey = Key.C
    _changeColorCommand.GestureModifier = ModifierKeys.Control
    _changeColorCommand.MouseGesture = MouseAction.RightClick
End Sub

' Switch the Background color between 
' the original and selected color. 
Private Function ChangeColor(ByVal colorString As Object) As Integer

    If colorString Is Nothing Then
        Return 0
    End If

    Dim newColor As Color = DirectCast(ColorConverter.ConvertFromString(DirectCast(colorString, [String])), Color)

    alternateColor = New SolidColorBrush(newColor)

    If Brush.Equals(Me.Background, originalColor) Then
        Me.Background = alternateColor
    Else
        Me.Background = originalColor
    End If

    Return 0
End Function

Наконец, в следующем примере создается пользовательский интерфейс. В примере добавляются KeyBinding и в MouseBinding , StackPanel содержащий Button и ListBox. Когда пользователь выбирает элемент в ListBox, он может изменить цвет фона на выбранный. В каждом случае CommandParameter свойство привязывается к выбранному элементу ListBoxв , а Command свойство — к ColorChangeCommand. Свойства KeyBinding.Key, KeyBinding.Modifiersи MouseBinding.MouseAction привязаны к соответствующим свойствам SimpleDelegateCommand класса .

<StackPanel Background="Transparent">
  <StackPanel.InputBindings>
    
    <KeyBinding Command="{Binding ChangeColorCommand}"
                CommandParameter="{Binding ElementName=colorPicker, Path=SelectedItem}"
                Key="{Binding ChangeColorCommand.GestureKey}"
                Modifiers="{Binding ChangeColorCommand.GestureModifier}"/>

    <MouseBinding Command="{Binding ChangeColorCommand}"
                  CommandParameter="{Binding ElementName=colorPicker, Path=SelectedItem}"
                  MouseAction="{Binding ChangeColorCommand.MouseGesture}"/>
  
  </StackPanel.InputBindings>
  
  <Button Content="Change Color" 
          Command="{Binding ChangeColorCommand}" 
          CommandParameter="{Binding ElementName=colorPicker, Path=SelectedItem}">
  </Button>

  <ListBox Name="colorPicker"
           Background="Transparent"
           xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys:String>Red</sys:String>
    <sys:String>Green</sys:String>
    <sys:String>Blue</sys:String>
    <sys:String>Yellow</sys:String>
    <sys:String>Orange</sys:String>
    <sys:String>Purple</sys:String>
  </ListBox>
</StackPanel>

Комментарии

Можно указать, что входные данные пользователя вызывают команду, создав InputBinding. Когда пользователь выполняет указанные входные данные, ICommand выполняется свойство , для свойства Command .

Можно указать, что InputBinding вызывает команду, определенную для объекта , создав привязку Commandдля свойств , CommandParameterи CommandTarget . Это позволяет определить пользовательскую команду и связать ее с вводимыми пользователем данными. Дополнительные сведения см. во втором примере в разделе Примеры.

Можно InputBinding определить в определенном объекте или на уровне класса путем регистрации RegisterClassInputBinding в CommandManager.

Сам InputBinding класс не поддерживает использование XAML, так как он не предоставляет открытый конструктор без параметров (существует конструктор без параметров, но он защищен). Однако производные классы могут предоставлять открытый конструктор и, следовательно, могут задавать свойства для производного класса, унаследованные от InputBinding с использованием XAML. Два существующих InputBindingпроизводных от класса, которые могут создаваться в XAML и задавать свойства в XAML, — это KeyBinding и MouseBinding. Типичное свойство в программировании WPF, которое задается в XAML и принимает один или несколько InputBinding объектов в качестве значений, является свойством UIElement.InputBindings .

Использование элемента объекта XAML

<inputBindingDerivedClass.../>

Значения XAML

inputBindingDerivedClass
Производный класс класса , InputBinding поддерживающий синтаксис элемента объекта, например KeyBinding или MouseBinding. См. заметки.

Конструкторы

InputBinding()

Предоставляет базовую инициализацию для производных от InputBinding классов.

InputBinding(ICommand, InputGesture)

Инициализирует новый экземпляр класса InputBinding с указанным именем команды и жестом ввода.

Поля

CommandParameterProperty

Идентифицирует свойство зависимостей CommandParameter.

CommandProperty

Идентифицирует свойство зависимостей Command.

CommandTargetProperty

Идентифицирует свойство зависимостей CommandTarget.

Свойства

CanFreeze

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

(Унаследовано от Freezable)
Command

Возвращает или задает объект ICommand, связанный с этой входной привязкой.

CommandParameter

Получает или задает специфические для команды данные для конкретной команды.

CommandTarget

Получает или задает для команды целевой элемент.

DependencyObjectType

Возвращает объект , DependencyObjectType который заключает в оболочку тип СРЕДЫ CLR данного экземпляра.

(Унаследовано от DependencyObject)
Dispatcher

Возвращает объект Dispatcher, с которым связан этот объект DispatcherObject.

(Унаследовано от DispatcherObject)
Gesture

Возвращает или задает объект InputGesture, связанный с этой входной привязкой.

IsFrozen

Получает значение, указывающее, доступен ли объект для изменения в настоящее время.

(Унаследовано от Freezable)
IsSealed

Получает значение, указывающее, является ли этот экземпляр в данный момент запечатанным (доступным только для чтения).

(Унаследовано от DependencyObject)

Методы

CheckAccess()

Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)
ClearValue(DependencyProperty)

Очищает локальное значение свойства. Очищаемое свойство задается идентификатором DependencyProperty.

(Унаследовано от DependencyObject)
ClearValue(DependencyPropertyKey)

Очищает локальное значение доступного только для чтения свойства. Очищаемое свойство задается ключом DependencyPropertyKey.

(Унаследовано от DependencyObject)
Clone()

Создает изменяемый клон данного объекта Freezable, делая глубокие копии значений этого объекта. При копировании свойств зависимостей объекта этот метод копирует выражения (которые могут уже не быть разрешимыми), но не копирует анимации и их текущие значения.

(Унаследовано от Freezable)
CloneCore(Freezable)

Копирует базовые (не анимационные) значения свойств заданного объекта.

CloneCurrentValue()

Создает редактируемую копию (глубокую копию) объекта Freezable с использованием его текущих значений.

(Унаследовано от Freezable)
CloneCurrentValueCore(Freezable)

Копирует текущие значения свойств заданного объекта.

CoerceValue(DependencyProperty)

Приводит значение указанного свойства зависимостей. Это осуществляется путем вызова какой-либо функции CoerceValueCallback, указанной в метаданных свойства зависимостей, которое существует в вызывающем объекте DependencyObject.

(Унаследовано от DependencyObject)
CreateInstance()

Инициализирует новый экземпляр класса Freezable.

(Унаследовано от Freezable)
CreateInstanceCore()

Создает экземпляр класса InputBinding.

Equals(Object)

Определяет, является ли указанный DependencyObject эквивалентом текущего DependencyObject.

(Унаследовано от DependencyObject)
Freeze()

Делает текущий объект неизменяемым и присваивает его свойству IsFrozen значение true.

(Унаследовано от Freezable)
FreezeCore(Boolean)

Делает объект Freezable нередактируемым или проверяет, можно ли его сделать нередактируемым.

(Унаследовано от Freezable)
GetAsFrozen()

Создает фиксированную копию объекта Freezable, используя базовые (не анимационные) значения свойств. Так как копия является фиксированной, копируются только ссылки на фиксированные вложенные объекты.

(Унаследовано от Freezable)
GetAsFrozenCore(Freezable)

Создает экземпляр замороженной копии заданного объекта Freezable, используя базовые (не анимационные) значения свойства.

GetCurrentValueAsFrozen()

Создает фиксированную копию объекта Freezable с использованием текущих значений свойств. Так как копия является фиксированной, копируются только ссылки на фиксированные вложенные объекты.

(Унаследовано от Freezable)
GetCurrentValueAsFrozenCore(Freezable)

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

GetHashCode()

Возвращает хэш-код для данного объекта DependencyObject.

(Унаследовано от DependencyObject)
GetLocalValueEnumerator()

Создает специализированный перечислитель для определения свойств зависимостей, которые локально установили значения для данного DependencyObject.

(Унаследовано от DependencyObject)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetValue(DependencyProperty)

Возвращает текущее действующее значение свойства зависимостей в этом экземпляре DependencyObject.

(Унаследовано от DependencyObject)
InvalidateProperty(DependencyProperty)

Повторно вычисляет действующее значение для указанного свойства зависимостей.

(Унаследовано от DependencyObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnChanged()

Вызывается при изменении текущего объекта Freezable.

(Унаследовано от Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Обеспечивает создание соответствующих указателей контекста для элемента данных типа DependencyObjectType, который был только что задан.

(Унаследовано от Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Этот элемент поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода.

(Унаследовано от Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

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

(Унаследовано от DependencyObject)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Переопределяет реализацию DependencyObject для OnPropertyChanged(DependencyPropertyChangedEventArgs), чтобы также вызвать любой обработчик Changed в ответ на изменение свойства зависимостей типа Freezable.

(Унаследовано от Freezable)
ReadLocalValue(DependencyProperty)

Возвращает локальное значение свойства зависимостей, если таковое существует.

(Унаследовано от DependencyObject)
ReadPreamble()

Обеспечивает доступ к Freezable из допустимого потока. Наследники объекта Freezable должны вызывать данный метод в начале любого API, который считывает элементы данных, не являющиеся свойствами зависимостей.

(Унаследовано от Freezable)
SetCurrentValue(DependencyProperty, Object)

Задает значение свойства зависимостей, не меняя источник значения.

(Унаследовано от DependencyObject)
SetValue(DependencyProperty, Object)

Задает локальное значение свойства зависимостей, указанного идентификатором этого свойства.

(Унаследовано от DependencyObject)
SetValue(DependencyPropertyKey, Object)

Задает локальное значение свойства зависимости только для чтения, определяемое идентификатором DependencyPropertyKey свойства зависимостей.

(Унаследовано от DependencyObject)
ShouldSerializeProperty(DependencyProperty)

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

(Унаследовано от DependencyObject)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
VerifyAccess()

Обеспечивает наличие у вызывающего потока доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)
WritePostscript()

Вызывает событие Changed для объекта Freezable и вызывает его метод OnChanged(). Классы, производные от Freezable, должны вызывать этот метод в конце любого API, который изменяет члены класса, не сохраненные в виде свойств зависимостей.

(Унаследовано от Freezable)
WritePreamble()

Проверяет, что объект Freezable не заморожен и доступ к нему осуществляется из допустимого контекста потока. Наследники объекта Freezable должны вызывать данный метод в начале любого API, который выполняет запись в элементах данных, не являющихся свойствами зависимостей.

(Унаследовано от Freezable)

События

Changed

Происходит, когда изменяется класс Freezable или объект, который входит в его состав.

(Унаследовано от Freezable)

Применяется к

См. также раздел