Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 带有动态菜单项的菜单项_C#_.net_Wpf - Fatal编程技术网

C# 带有动态菜单项的菜单项

C# 带有动态菜单项的菜单项,c#,.net,wpf,C#,.net,Wpf,我的应用程序中有此菜单栏: <Menu Grid.Row="0" Height="22" Name="menu1" HorizontalAlignment="Stretch" VerticalAlignment="Top" > <MenuItem Header="File" /> <MenuItem Header="Youtube"> </MenuItem> <MenuItem

我的应用程序中有此
菜单栏

<Menu Grid.Row="0" Height="22" Name="menu1" HorizontalAlignment="Stretch" VerticalAlignment="Top" >
        <MenuItem Header="File" />
        <MenuItem Header="Youtube">

        </MenuItem>
        <MenuItem Header="Help" />
    </Menu>
它说,如果你登录显示注销和刷新,否则快照登录。 我尝试将此方法添加到Youtube菜单项的
Click=“DidPressDeleteAllFavorites”
,但它不起作用。
知道怎么修吗?我做错了什么?

如果您使用的是MVVM模式

<MenuItem Header="Youtube" ItemsSource="{Binding yourProperty}"/>

编辑 在我看来,代码中的问题是,您只需要在启动时调用事件代码,因为Youtube在开始时没有子菜单项,或者您也可以在事件中调用
UpdateLayout()
,这也可能会修复它

工作示例 代码隐藏

 public partial class MainWindow : Window
    {
        bool test = false;
        public MainWindow()
        {
            InitializeComponent();

            MenuItem_Click(myYouTube, null);
        }

        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            var mymenuitem = sender as MenuItem;

            MenuItem menu = (MenuItem)sender;
            ItemCollection items = menu.Items;
            items.Clear();

            if (test)
            {
                MenuItem refreshItem = new MenuItem();
                refreshItem.Header = "Refresh";
                //refreshItem.Click += DidPressRefresh;
                items.Add(refreshItem);

                MenuItem logouttItem = new MenuItem();
                logouttItem.Header = "Signout";
                //logouttItem.Click += DidPressLogout;
                items.Add(logouttItem);


                test = false;
            }
            else
            {
                MenuItem loginItem = new MenuItem();
                loginItem.Header = "Login";
                //loginItem.Click += DidPressLogin;
                items.Add(loginItem);

                test = true;
            }
        }
    }
XAML

 <Menu Height="23" HorizontalAlignment="Left" Margin="84,66,0,0" Name="menu1" VerticalAlignment="Top" Width="200">
            <MenuItem Header="File" />
            <MenuItem Header="Youtube" Name="myYouTube" Click="MenuItem_Click">

            </MenuItem>
            <MenuItem Header="Help" />
        </Menu>


什么不起作用?你收到错误了吗?你调试过你的代码吗?在我第一次单击YouTube MenuItem时,什么都没有发生(但是这个方法调用),从那里我单击YouTube MenuItem时,MenuItem是打开的。你的代码的第二部分是事件处理程序吗?你不应该在过程代码中创建UI的部分。您必须将这些
菜单
s绑定到
ICommand的
列表
。请看一下
菜单
的解释。我尝试绑定它,但我希望每次单击菜单项时它都会绑定。这是我在单击事件中所做的操作,但在第一次单击菜单时不会打开,我将编辑我的答案,因为我现在知道出了什么问题^^我注意到,当我将菜单项添加到我的YouTube上时单击事件不会被调用,并且每次单击myYouTube MenuItem时都会在代码中调用此方法?感谢您的帮助,我使用了您的帖子来实现我的目标
 myYoutube.ItemsSource=yourMenuItems;
 public partial class MainWindow : Window
    {
        bool test = false;
        public MainWindow()
        {
            InitializeComponent();

            MenuItem_Click(myYouTube, null);
        }

        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            var mymenuitem = sender as MenuItem;

            MenuItem menu = (MenuItem)sender;
            ItemCollection items = menu.Items;
            items.Clear();

            if (test)
            {
                MenuItem refreshItem = new MenuItem();
                refreshItem.Header = "Refresh";
                //refreshItem.Click += DidPressRefresh;
                items.Add(refreshItem);

                MenuItem logouttItem = new MenuItem();
                logouttItem.Header = "Signout";
                //logouttItem.Click += DidPressLogout;
                items.Add(logouttItem);


                test = false;
            }
            else
            {
                MenuItem loginItem = new MenuItem();
                loginItem.Header = "Login";
                //loginItem.Click += DidPressLogin;
                items.Add(loginItem);

                test = true;
            }
        }
    }
 <Menu Height="23" HorizontalAlignment="Left" Margin="84,66,0,0" Name="menu1" VerticalAlignment="Top" Width="200">
            <MenuItem Header="File" />
            <MenuItem Header="Youtube" Name="myYouTube" Click="MenuItem_Click">

            </MenuItem>
            <MenuItem Header="Help" />
        </Menu>