Silverlight 4 支持在任意继承ButtonBase类的对象中使用ICommand接口,包括C1ToolbarButton在内的任意按钮可以通过控件的Command属性关联实现ICommand的对象,尽管支持ICommand接口,但Silverlight并不提供任何内置的实现,Silverlight Edition包括C1Command 及C1ToolbarCommand 两个实现,因此您不需要自己来编写。
C1Command 类被包含在C1.Silverlight 配置中,C1ToolbarCommand被包含在C1.Silverlight.Toolbar配置中,您可以通过添加几个额外的工具栏,并关联相应的标签和图片属性以扩展 C1Command 。以下步骤演示了如何使用C1Toolbar指令。
使用使用C1ToolbarCommand
- 打开或创建一个新的Silverlight 应用程序。
添加两个RowDefinitions 到默认的Grid 元素,将第一行设置为自动高度,如:
XAML
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>- 添加一个C1Toolbar以填充第一行。
- 在第二行中添加一个TextBox。
粘贴下述C1ToolbarCommand 到UserControl资源:
XAML
<UserControl.Resources>
<c1:C1ToolbarCommand x:Key="cmdClear" LabelTitle="Clear Text"
LargeImageSource="/Resources/delete.png" />
</UserControl.Resources>- 该指令将用于清除TextBox中内容,您可以为C1ToolbarCommand指定一个LargeImageSource 和SmallImageSource,但这不是必须的。
粘贴以下XAML 来填充带有标签或者分组按钮的C1Toolbar:
XAML
<c1:C1Toolbar Name="c1Toolbar1">
<c1:C1ToolbarTabControl>
<c1:C1ToolbarTabItem Header="Home">
<c1:C1ToolbarGroup Header="Application">
<c1:C1ToolbarButton c1:CommandExtensions.Command="{StaticResource cmdClear}" />
</c1:C1ToolbarGroup>
</c1:C1ToolbarTabItem> </c1:C1ToolbarTabControl>
</c1:C1Toolbar>- 这里我们设置c1:CommandExtensions.Command 属性到我们的指令中,注意C1ToolbarButton 也有一个继承的Command属性,当使用C1Commands时最好使用附加属性CommandExtensions.Command 来设置指令。
- 添加一个TextBox 到页面下方名为"textBox1"的工具栏。
- 接下来,您需要注册该指令后,在页面初始化使用此代码:
C# |
// 注册指令方法 |
C1.Silverlight.CommandManager 提供用于注册指令的实用方法。 12. 粘贴以下Clear 及 CanClear 事件处理以执行指令逻辑:
C#
private void Clear(object sender, ExecutedRoutedEventArgs e)
{ textBox1.Text = "";
} private void CanClear(object sender, CanExecuteRoutedEventArgs e)
{ if (textBox1.Text.Length > 0)
{
e.CanExecute = true; } else
e.CanExecute = false;
}在Silverlight版中您需要显式的在代码中检查已注册指令的能力,需要在TextBox 的TextChanged 事件中添加以下代码:
C#
private void textBox1_TextChanged(object sender, TextChangedEventArgs e) {
CommandManager.InvalidateRequerySuggested();
}- 运行示例,您现在可以通过在C1Toolbar中使用C1Command来清除文本框中的内容。