共用方式為


InputBinding 類別

定義

代表 a 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 將 a KeyGesture 綁定到 指令 Open 。 當執行鍵位時,會呼叫 Open 指令。

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

以下範例展示了如何將自訂指令綁定到 InputBinding 物件上。 這些範例建立了一個應用程式,讓使用者可以透過執行以下其中一項動作來更改背景顏色:

第一個範例會產生一個名為 SimpleDelegateCommand的類別。 此類別接受代理,使建立指令的物件能定義執行時所發生的動作。 SimpleDelegateCommand 同時也定義了指定呼叫指令的按鍵與滑鼠輸入的屬性。 GestureKeyGestureModifier 指定鍵盤輸入; 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

最後,以下範例建立使用者介面。 範例將 a KeyBinding 和 a MouseBinding 加入 StackPanel 包含 a ButtonListBoxa。 當使用者在 中選擇 ListBox項目時,可以將背景顏色更改為所選顏色。 在每種情況下,屬性 CommandParameter 綁定於 中所選的項目 ListBox,而 Command 屬性則綁定於 ColorChangeCommand。 這些 KeyBinding.KeyKeyBinding.ModifiersMouseBinding.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 的 that 會被執行。

你可以透過在 、 CommandParameterCommandTarget 屬性上建立綁定Command,指定 該InputBinding指令在物件上定義。 這讓你能定義自訂指令,並將其與使用者輸入關聯。 欲了解更多資訊,請參閱範例部分的第二個範例。

An InputBinding 可以定義在特定物件上,或在類別層級透過註冊 a RegisterClassInputBindingCommandManager定義。

InputBinding 類別本身不支援 XAML 的使用 ,因為它不會暴露公開的無參數建構子(雖然有無參數建構子,但受到保護)。 然而,導出類別可以暴露公開建構子,因此可以在導出類別上設定繼承 InputBinding 自 XAML 的屬性。 兩個可 InputBinding於 XAML 實例化並在 XAML 中設定屬性的 -衍生類別為 KeyBindingMouseBinding和 。 在 WPF 程式設計中,XAML 中設定並取一個或多個 InputBinding 物件作為值的典型屬性是 屬性 UIElement.InputBindings

XAML 物件元素的使用

< inputBindingDerivedClass.../>

XAML 值

inputBindingDerivedClass 一個支援物件元素語法的衍生類別 InputBinding ,例如 KeyBindingMouseBinding。 請參閱<備註>。

建構函式

名稱 Description
InputBinding()

提供由 InputBinding衍生的類別的基礎初始化。

InputBinding(ICommand, InputGesture)

以指定的指令和輸入手勢初始化該 InputBinding 類別的新實例。

欄位

名稱 Description
CommandParameterProperty

識別 CommandParameter 依賴性質。

CommandProperty

識別 Command 依賴性質。

CommandTargetProperty

識別 CommandTarget 依賴性質。

屬性

名稱 Description
CanFreeze

會得到一個值,表示該物件是否能被設定為不可修改。

(繼承來源 Freezable)
Command

取得或設定與此輸入綁定相關的 。ICommand

CommandParameter

取得或設定特定指令的指令資料。

CommandTarget

取得或設定指令的目標元素。

DependencyObjectType

會取得 DependencyObjectType 包裹此實例 CLR 類型的 。

(繼承來源 DependencyObject)
Dispatcher

了解 Dispatcher 這與此 DispatcherObject 有關。

(繼承來源 DispatcherObject)
Gesture

取得或設定與此輸入綁定相關的 。InputGesture

IsFrozen

會得到一個值,表示該物件目前是否可修改。

(繼承來源 Freezable)
IsSealed

會獲得一個值,表示該實例目前是否封存(唯讀)。

(繼承來源 DependencyObject)

方法

名稱 Description
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, DependencyProperty)

此成員支援 Windows Presentation Foundation(WPF)基礎架構,並非直接從您的程式碼中使用。

(繼承來源 Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

確保剛設定的資料成員建立 DependencyObjectType 適當的上下文指標。

(繼承來源 Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

當任何依賴性財產 DependencyObject 的實際價值更新時,該權利會被調用。 變更的具體相依屬性會在事件資料中報告。

(繼承來源 DependencyObject)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

DependencyObject寫 的OnPropertyChanged(DependencyPropertyChangedEventArgs)實作,也在回應類型中變動的依賴屬性Freezable時呼叫任何Changed處理器。

(繼承來源 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)

事件

名稱 Description
Changed

Freezable 它所包含的物件被修改時,會發生這種情況。

(繼承來源 Freezable)

適用於

另請參閱