xamMenu™ コントロールによって、その項目に異なるレイアウト オプションが可能となり、メニュー項目は垂直または水平方向にすることができます。このレイアウトは、メニューおよび各メニュー項目に存在する MenuOrientation プロパティによって制御されます。
サブメニュー項目が表示する場所を指定することもできます。各 XamMenuItem オブジェクトの SubmenuPreferredLocation プロパティは、子項目の位置を制御します。それを Auto、Bottom、Left、Right、または Top に設定できます。
さらに、サブメニュー項目が表示される方法を制御できます。デフォルトでは、項目をクリックするとメニュー項目の子項目が表示されますが、xamMenu で ExpandOnHover プロパティを True に設定することで、子項目をホーバーで表示するように変更できます。また、エンドユーザーがサブメニュー内でメニュー項目をクリックすると、サブメニューは閉じます。XamMenuItem オブジェクトの StaysOpenOnClick プロパティを True に設定することで、このデフォルト動作をオーバーライドし、メニュー項目を開いたままにできます。
以下のコードはメニューの方向、拡張オプション、およびメニュー項目の位置を設定する方法を示します。
XAML の場合:
<ig:XamMenu x:Name="xamMenu1" Height="200" Width="40" MenuOrientation="Vertical" ExpandOnHover="True"> <!-- TODO: メニュー項目を追加します --> <ig:XamMenuItem Header="File" SubmenuPreferredLocation="Right"> <ig:XamMenuItem Header="New" StaysOpenOnClick="True"/> <ig:XamMenuItem Header="Open" /> <ig:XamMenuItem Header="Exit" /> </ig:XamMenuItem> <ig:XamMenuItem Header="Edit" SubmenuPreferredLocation="Right"> <ig:XamMenuItem Header="Cut" /> <ig:XamMenuItem Header="Copy" /> <ig:XamMenuItem Header="Paste" /> </ig:XamMenuItem> </ig:XamMenu>
Visual Basic の場合:
Private Sub UserControl_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) ' メニューを作成します Dim menu1 As New XamMenu() Me.LayoutRoot.Children.Add(menu1) ' メニューのレイアウト オプションを設定します menu1.Height = 200 menu1.Width = 40 menu1.MenuOrientation = Orientation.Vertical menu1.ExpandOnHover = True ' TODO: メニュー項目を追加します ' File メニュー項目を作成します Dim parentMenuItem As New XamMenuItem() parentMenuItem.Header = "File" ' 単一項目のレイアウト設定 parentMenuItem.SubmenuPreferredLocation = MenuItemPosition.Right menu1.Items.Add(parentMenuItem) ' 子項目を File メニュー項目に追加します Dim childMenuItem As New XamMenuItem() childMenuItem.Header = "New" ' 単一項目のレイアウト設定 childMenuItem.StaysOpenOnClick = True parentMenuItem.Items.Add(childMenuItem) childMenuItem = New XamMenuItem() childMenuItem.Header = "Open" parentMenuItem.Items.Add(childMenuItem) childMenuItem = New XamMenuItem() childMenuItem.Header = "Exit" parentMenuItem.Items.Add(childMenuItem) ' Edit メニュー項目を作成します parentMenuItem = New XamMenuItem() parentMenuItem.Header = "Edit" ' 単一項目のレイアウト設定 parentMenuItem.SubmenuPreferredLocation = MenuItemPosition.Right menu1.Items.Add(parentMenuItem) ' 子項目を Edit メニュー項目に追加します childMenuItem = New XamMenuItem() childMenuItem.Header = "Cut" parentMenuItem.Items.Add(childMenuItem) childMenuItem = New XamMenuItem() childMenuItem.Header = "Copy" parentMenuItem.Items.Add(childMenuItem) childMenuItem = New XamMenuItem() childMenuItem.Header = "Paste" parentMenuItem.Items.Add(childMenuItem) End Sub
C# の場合:
private void UserControl_Loaded(object sender, RoutedEventArgs e) { // メニューを作成します XamMenu menu1 = new XamMenu(); this.LayoutRoot.Children.Add(menu1); // メニューのレイアウト オプションを設定します menu1.Height = 200; menu1.Width = 40; menu1.MenuOrientation = Orientation.Vertical; menu1.ExpandOnHover = true; // TODO: メニュー項目を追加します // File メニュー項目を作成します XamMenuItem parentMenuItem = new XamMenuItem(); parentMenuItem.Header = "File"; // 単一項目のレイアウト設定 parentMenuItem.SubmenuPreferredLocation = MenuItemPosition.Right; menu1.Items.Add(parentMenuItem); // 子項目を File メニュー項目に追加します XamMenuItem childMenuItem = new XamMenuItem(); childMenuItem.Header = "New"; // 単一項目のレイアウト設定 childMenuItem.StaysOpenOnClick = true; parentMenuItem.Items.Add(childMenuItem); childMenuItem = new XamMenuItem(); childMenuItem.Header = "Open"; parentMenuItem.Items.Add(childMenuItem); childMenuItem = new XamMenuItem(); childMenuItem.Header = "Exit"; parentMenuItem.Items.Add(childMenuItem); // Edit メニュー項目を作成します parentMenuItem = new XamMenuItem(); parentMenuItem.Header = "Edit"; // 単一項目のレイアウト設定 parentMenuItem.SubmenuPreferredLocation = MenuItemPosition.Right; menu1.Items.Add(parentMenuItem); // 子項目を Edit メニュー項目に追加します childMenuItem = new XamMenuItem(); childMenuItem.Header = "Cut"; parentMenuItem.Items.Add(childMenuItem); childMenuItem = new XamMenuItem(); childMenuItem.Header = "Copy"; parentMenuItem.Items.Add(childMenuItem); childMenuItem = new XamMenuItem(); childMenuItem.Header = "Paste"; parentMenuItem.Items.Add(childMenuItem); }