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>