Silverlight 5 は、ButtonBase クラスから派生された任意のオブジェクトで ICommand インターフェイスをサポートしています。コントロールの Command プロパティを通して、ICommand を実装するオブジェクトに、C1ToolbarButton などの任意のボタンを関連付けることができます。 ICommand インターフェイスはサポートされていますが、Silverlight は組み込みの実装を提供していません。ComponentOne for Silverlight には、C1Command と C1ToolbarCommand の2つの実装が含まれているため、自分で実装を記述する必要はありません。
C1Command クラスは C1.Silverlight アセンブリに含まれています。C1ToolbarCommand は C1Command を拡張し、C1.Silverlight.Toolbar アセンブリに含まれています。これには、ツールバーに関連して、ラベルとイメージのプロパティがいくつか追加されています。
以下の手順では、C1Toolbar を使用したコマンドの使用方法を示しています。
新しい Silverlight アプリケーションを開くか、作成します。
デフォルトの Grid 要素に2つの RowDefinition を追加し、最初の行の高さを自動にします。次のようになります。
XAML |
コードのコピー
|
---|---|
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
|
最初の行に挿入する C1Toolbar を追加します。
2行目に TextBox を追加します。
次の C1ToolbarCommand をユーザーコントロールリソースに貼り付けます。次のようになります。
XAML |
コードのコピー
|
---|---|
<UserControl.Resources> <c1:C1ToolbarCommand x:Key="cmdClear" LabelTitle="Clear Text" LargeImageSource="/Resources/delete.png" /> </UserControl.Resources> |
次の 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> |
ページ内の “textBox1”という名前のツールバーの下に1つの TextBox を追加します。
次に、次のコードを使用して、ページの初期化後にコマンドを登録する必要があります。
C# |
コードのコピー
|
---|---|
// コマンドのメソッドを登録します CommandManager.RegisterClassCommandBinding(GetType(), new CommandBinding((C1ToolbarCommand)Resources["cmdClear"], Clear, CanClear)); // 登録されたコマンドを実行できるかどうかをチェックします CommandManager.InvalidateRequerySuggested(); |
次の 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 を使用して、テキストボックスのコンテンツをクリアできるようになりました。