InputBinding 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示 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 命令。 執行按鍵手勢時,會叫用 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至 StackPanel ,其中包含 Button 和 ListBox。MouseBinding 當使用者在 中 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 。
您可以藉由在、 CommandParameter和 CommandTarget 屬性上Command建立系結,指定 叫InputBinding用 對象上定義的命令。 這可讓您定義自定義命令,並將其與使用者輸入產生關聯。 如需詳細資訊,請參閱一節中的第二個範例。
可以在特定物件或類別層級上定義 ,InputBinding方法是向 CommandManager註冊 RegisterClassInputBinding 。
類別 InputBinding 本身不支援 XAML 使用方式,因為它不會公開公用無參數建構函式, (有無參數建構函式,但受到保護) 。 不過,衍生類別可以公開公用建構函式,因此可以在使用 XAML 使用方式繼承自 InputBinding 的衍生類別上設定屬性。 兩個可以在 XAML 中具現化的現有 InputBinding衍生類別,而且可以在 XAML 中設定屬性為 KeyBinding 和 MouseBinding。 WPF 程式設計中的一般屬性是在 XAML 中設定,並接受一或多個 InputBinding 物件做為值,就是 UIElement.InputBindings 屬性。
XAML 物件項目用法
< inputBindingDerivedClass.../>
XAML 值
inputBindingDerivedClass
的衍生類別 InputBinding ,支援物件項目語法,例如 KeyBinding 或 MouseBinding。 請參閱<備註>。
建構函式
InputBinding() |
提供 InputBinding 衍生類別的基底初始化。 |
InputBinding(ICommand, InputGesture) |
使用指定的命令和輸入筆勢初始化 InputBinding 類別的新執行個體 (Instance)。 |
欄位
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) |
方法
事件
Changed |
發生於 Freezable 或所含的物件遭到修改時。 (繼承來源 Freezable) |