Поделиться через


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
Наследование
Наследование
Производный
Реализации

Примеры

В следующем примере показано, как использовать a KeyBinding для привязки KeyGesture к команде Open . При выполнении жеста ключа вызывается команда 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. В примере также определяется метод, который выполняется при вызове команды и задает GestureKeyGestureModifierсвойства , а 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 a MouseBinding в объект StackPanel , содержащий a Button и a ListBox. Когда пользователь выбирает элемент в ListBoxэлементе, он может изменить цвет фона на выбранный цвет. В каждом случае CommandParameter свойство привязано к выбранному элементу в объекте ListBox, и Command свойство привязано к свойству ColorChangeCommand. Свойства KeyBinding.Keyи MouseBinding.MouseAction свойства привязаны к соответствующим свойствам SimpleDelegateCommand класса. KeyBinding.Modifiers

<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. Когда пользователь выполняет указанные входные данные, ICommandCommand выполняется значение свойства.

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

Можно 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()

Делает текущий объект неизменяемым и задает для свойства значение IsFrozentrue.

(Унаследовано от 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, DependencyProperty)

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

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

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

(Унаследовано от 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)

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

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