Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何动态创建菜单而不是在XAML中硬编码?_C#_Wpf_Xaml - Fatal编程技术网

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);