命令库里有很多WPF预制命令,如New、Open、Copy、Cut、Paste等。这些命令都是ApplicationCommands类的静态属性,所以实例永远只有一个,那么这时候就需要用CommandPrameter属性。
下面实现连个按钮,一个用来新建Teacher的档案,另一个用来新建Student的档案,都是用New命令的:
<Window x:Class="WpfWindows8.WinMain9_1_5"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfWindows8"
mc:Ignorable="d"
Title="Command Prameter" Height="240" Width="360" Background="LightBlue" WindowStyle="ToolWindow">
<Grid Margin="6">
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="4" />
<RowDefinition Height="24" />
<RowDefinition Height="4" />
<RowDefinition Height="24" />
<RowDefinition Height="4" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!--命令和命令参数-->
<TextBlock Text="Name:" VerticalAlignment="Center" HorizontalAlignment="Left"
Grid.Row="0" />
<TextBox x:Name="txtName" Margin="60,0,0,0" Grid.Row="0" />
<Button Content="New Teacher" Command="New" CommandParameter="Teacher"
Grid.Row="2" />
<Button Content="New Student" Command="New" CommandParameter="Student"
Grid.Row="4" />
<ListBox x:Name="listBoxNewItems" Grid.Row="6" />
</Grid>
<!--为窗体添加CommandBinding-->
<Window.CommandBindings>
<CommandBinding Command="New" CanExecute="New_CanExecute"
Executed="New_Executed" />
</Window.CommandBindings>
</Window>
两个按钮都是用New命令,但分别使用字符串Teacher和Student作为参数。
使用XAML代码为窗体添加CommandBinding,CanExecute和Executed事件处理器写在后台c#代码里。
CommandBinding的两个事件处理器代码如下:
private void New_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (string.IsNullOrEmpty(this.txtName.Text))
{
e.CanExecute = false;
}
else
{
e.CanExecute = true;
}
}
private void New_Executed(object sender, ExecutedRoutedEventArgs e)
{
string name = this.txtName.Text;
if (e.Parameter.ToString() == "Teacher")
{
this.listBoxNewItems.Items.Add(string.Format("New Teacher: {0}, 学而不厌、诲人不倦。", name));
}
if (e.Parameter.ToString() == "Student")
{
this.listBoxNewItems.Items.Add(string.Format("New Student: {0}, 好好学习、天天向上。", name));
}
}
效果图如下: