MenuItem与动态MenuItems

时间:2013-03-10 14:40:37

标签: c# .net wpf

我的应用程序中有MenuBar

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

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

我想将项目添加到Youtube MenuItem动态,如下所示:

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

        if (YouTubeAuth.CreateInstance().IsLogin())
        {
            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);
        }
        else
        {
            MenuItem loginItem = new MenuItem();
            loginItem.Header = "Login";
            loginItem.Click += DidPressLogin;
            items.Add(loginItem);
        }

它说如果你登录show logout并刷新否则拍摄登录。 我尝试将此方法添加到Click="DidPressDeleteAllFavorites"的{​​{1}},但它不起作用。 知道怎么解决吗?我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您正在使用MVVM模式

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

如果您正在使用代码隐藏

XAML

 <MenuItem Header="Youtube" Name="myYoutube"/>

代码隐藏

 myYoutube.ItemsSource=yourMenuItems;

修改

您的代码中的问题在我看来,您只需要在启动时调用您的事件代码,因为您的Youtube在开始时没有subMenuitem,或者您也可以在事件中调用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>