0

私は私のアプリケーションでこれを持ってMenuBarいます:

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

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

そして、次のようなアイテムをYoutubeMenuItemダイナミックに追加したい:

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 と表示され、それ以外の場合は shot login と表示されます。このメソッドを に追加しようとしましClick="DidPressDeleteAllFavorites"Youtube MenuItemが、うまくいきません。それを修正する方法はありますか?私は何を間違っていますか?

4

1 に答える 1

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>
于 2013-03-11T12:13:43.010 に答える