C# 如何动态创建菜单而不是在XAML中硬编码?
我已使用C# 如何动态创建菜单而不是在XAML中硬编码?,c#,wpf,xaml,C#,Wpf,Xaml,我已使用 .XAML <Grid> <DockPanel> <Menu> <MenuItem Header="Menu"> <MenuItem Header="{Binding Path=ddlXferData1}" Command="{Binding Path=XferData}" Click="MenuItem_Clic
.XAML
<Grid>
<DockPanel>
<Menu>
<MenuItem Header="Menu">
<MenuItem Header="{Binding Path=ddlXferData1}" Command="{Binding Path=XferData}" Click="MenuItem_Click" IsCheckable="True"/>
<MenuItem Header="{Binding Path=ddlXferData2}" Command="{Binding Path=XferData}" Click="MenuItem_Click" IsCheckable="True"/>
<MenuItem Header="{Binding Path=ddlXferData3}" Command="{Binding Path=XferData}" Click="MenuItem_Click" IsCheckable="True"/>
<Separator />
<MenuItem Header="{Binding Path=ddlSkillData1}" Command="{Binding Path=SkillData}" Click="MenuItem_Click" IsCheckable="True"/>
<MenuItem Header="{Binding Path=ddlSkillData2}" Command="{Binding Path=SkillData}" Click="MenuItem_Click" IsCheckable="True"/>
<MenuItem Header="{Binding Path=ddlSkillData3}" Command="{Binding Path=SkillData}" Click="MenuItem_Click" IsCheckable="True"/>
</MenuItem>
</Menu>
</DockPanel>
</Grid>
.xaml.cs
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
MenuItem mnItem = (MenuItem) e.OriginalSource;
this.Model.menuItemSelected = (string) mnItem.Header;
}
或
我应该动态构建XAML吗?不建议这样做,但您可以这样做:
//assuming you have Menu named MainMenu and you want to add Menu Item to it and Sub menu item to the item which you have just added
MenuItem MainItem = new MenuItem();
MainItem .Header = "Main Item";
this.MainMenu.Items.Add(MainItem);
MenuItem SubItem= new MenuItem();
SubItem.Header = "Sub Item";
SubItem.Click += new RoutedEventHandler(SubItem_Click);
MainItem.Items.Add(SubItem);
艾哈迈德,谢谢你的回复。如何在不使用.xaml的情况下将MenuItems加载到UI中?建议使用什么?欢迎使用(:,上面的代码完美地添加了菜单项,但建议使用XAML定义GUI,使用菜单时必须使用命令,命令将决定菜单项是启用还是禁用,但如果要隐藏菜单项,可以使用样式根据数据绑定控制其可见性,可以看到此示例
private void button1_Click(object sender, RoutedEventArgs e)
{
// Make the main menu.
Menu mainMenu = new Menu();
DockPanel dockPanel = new DockPanel();
dockPanel.Children.Add(mainMenu);
mainMenu.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
mainMenu.VerticalAlignment = System.Windows.VerticalAlignment.Top;
// Make the menu items.
MenuItem menuItem = new MenuItem();
.....
}
//assuming you have Menu named MainMenu and you want to add Menu Item to it and Sub menu item to the item which you have just added
MenuItem MainItem = new MenuItem();
MainItem .Header = "Main Item";
this.MainMenu.Items.Add(MainItem);
MenuItem SubItem= new MenuItem();
SubItem.Header = "Sub Item";
SubItem.Click += new RoutedEventHandler(SubItem_Click);
MainItem.Items.Add(SubItem);