WPF 命令
介紹
WPF命令系統由幾個基本要素構成:
1)命令
WPF命令實際上就是實現了ICommand介面的類,平時使用最多的是RoutedCommand類。
2)命令源
即命令的傳送者,是實現了ICommandSource介面的類。很多介面元素都實現了這個介面,其中包括Button、MenuItem等。
3)命令目標
即命令傳送給誰,或者說命令將作用在誰身上。命令目標必須實現了IInputElement介面的類。
4)命令關聯
負責把一些外圍邏輯與命令關聯起來,比如執行之前對命令是否可以執行判斷、命令執行之後還有哪些後續工作等。
1.介面
<StackPanel x:Name="stackPanel">
<Button x:Name="button1" Content="Send Command " Margin="5"/>
<TextBox x:Name="textBoxA" Margin="5,0" Height="100"/>
</StackPanel>
2.程式碼如下
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitCommand();
}
// 宣告並定義命令
private RoutedCommand clearCmd = new RoutedCommand("Clear", typeof(MainWindow));
private void InitCommand()
{
// 把命令賦值給命令源(傳送者)關指定快捷鍵
this.button1.Command = this.clearCmd;
this.clearCmd.InputGestures.Add(new KeyGesture(Key.C,ModifierKeys.Alt));
// 指定命令目標
this.button1.CommandTarget = this.textBoxA;
// 建立命令關聯
CommandBinding cb = new CommandBinding();
cb.Command = this.clearCmd; // 只關注與clearCmd相關事件
cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute);
cb.Executed += new ExecutedRoutedEventHandler(cb_Executed);
// 把命令關聯安置在外圍控制元件上
this.stackPanel.CommandBindings.Add(cb);
}
private void cb_Executed(object sender, ExecutedRoutedEventArgs e)
{
this.textBoxA.Clear();
e.Handled = true;
}
// 當探測命令是否可以執行時,此方法被呼叫
private void cb_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (string.IsNullOrEmpty(this.textBoxA.Text))
{
e.CanExecute = false;
}
else
{
e.CanExecute = true;
}
// 避免繼續向上傳而降低程式效能
e.Handled = true;
}
}
3.顯示效果
Alt+C 或點選Send Command 清除文字