ツールバーにはボタンやコンボボックスといったコントロール以外にも、メニューを表示させることができます。
メニューを表示させるにはMenuクラスを使用します。Menuについて、詳しくはこちらを参照ください。
下記はツールバーにメニューを表示する例です。
XAMLの例
<Window.CommandBindings>
<!-- [ファイル]-[新規作成]用コマンド -->
<CommandBinding Command="New" Executed="FileNewExecute" />
<!-- [ファイル]-[保存]用コマンド -->
<CommandBinding Command="SaveAs" Executed="FileSaveExecute" CanExecute="FileSaveCanExecute" />
</Window.CommandBindings>
<DockPanel Name="DocPanel1">
<ToolBarTray Name="ToolBarTray1" DockPanel.Dock="Top">
<ToolBar Name="ToolBar1" Band="1">
<Menu>
<MenuItem Header="ファイル(_F)">
<MenuItem Command="New" />
<MenuItem Command="SaveAs" />
<MenuItem Command="Save" />
<Separator />
<MenuItem Command="Close" />
</MenuItem>
<MenuItem Header="編集(_E)">
<MenuItem Command="Cut" />
<MenuItem Command="Copy" />
<MenuItem Command="Paste" />
</MenuItem>
</Menu>
</ToolBar>
<ToolBar DockPanel.Dock="Top" Band="2">
<Button Command="New">
<Image Source="Images/NewDocument.png" Width="16" Height="16" />
</Button>
<Button Command="Save">
<Image Source="Images/Save.png" Width="16" Height="16" />
</Button>
<TextBlock VerticalAlignment="Center">フォントサイズ</TextBlock>
<ComboBox Width="50">
<ComboBoxItem IsSelected="True">10pt</ComboBoxItem>
<ComboBoxItem>11pt</ComboBoxItem>
<ComboBoxItem>12pt</ComboBoxItem>
</ComboBox>
<Button>
<Image Source="Images/boldhs.png" Width="16" Height="16" />
</Button>
<Button>
<Image Source="Images/Italichs.png" Width="16" Height="16" />
</Button>
</ToolBar>
</ToolBarTray>
<TextBox Name="TextBox1"></TextBox>
</DockPanel>
VBの例
'コマンドに対するイベントコードの例
'TextBoxの内容に変更があったかどうかを示すフラグ
'内容に変更があった場合にTrueとする
Private IsModified As Boolean = False
' [ファイル]-[新規作成]に対するコマンド
Private Sub FileNewExecute(ByVal sender As System.Object, ByVal e As System.Windows.Input.ExecutedRoutedEventArgs)
MessageBox.Show("New")
End Sub
' [ファイル]-[保存]に対するコマンド
Private Sub FileSaveExecute(ByVal sender As System.Object, ByVal e As System.Windows.Input.ExecutedRoutedEventArgs)
MessageBox.Show("Save")
End Sub
' [ファイル]-[保存]の実行可否を決定する
Private Sub FileSaveCanExecute(ByVal sender As System.Object, ByVal e As System.Windows.Input.CanExecuteRoutedEventArgs)
'TextBoxの内容に変更があった場合
If IsModified Then
'[ファイル]-[保存]の実行を許可する
e.CanExecute = True
End If
End Sub
' テキストボックスの内容に変更があった場合の処理
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles TextBox1.TextChanged
'内容が変更されたことを示すためフラグをTrueにする
IsModified = True
End Sub
C#の例
// コマンドに対するイベントコードの例
// TextBoxの内容に変更があったかどうかを示すフラグ
// 内容に変更があった場合にTrueとする
private bool IsModified = false;
// [ファイル]-[新規作成]に対するコマンド
private void FileNewExecute(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("New");
}
// [ファイル]-[保存]に対するコマンド
private void FileSaveExecute(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("Save");
}
// [ファイル]-[保存]の実行可否を決定する
private void FileSaveCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
// TextBoxの内容に変更があった場合
if (IsModified)
{
// [ファイル]-[保存]の実行を許可する
e.CanExecute = true;
}
}
// テキストボックスの内容に変更があった場合の処理
private void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
// 内容が変更されたことを示すためフラグをTrueにする
IsModified = true;
}
