【发布时间】:2013-12-02 18:09:55
【问题描述】:
我有一个树视图,其中的项目是从几个 xml 文件中收集的。然后,根据选择的树视图项,显示自定义上下文菜单。这一切都很好,除了我相信我遇到了这个MSDN Article中描述的问题。
我一定遗漏了文章描述的建议解决方法,但我坚持到底是什么。
当我右键单击一个树视图项时(在本例中,我关注的是称为“客户端”的根树视图项),上下文菜单按预期在第一次鼠标单击时出现,并且菜单项的文本是“这将被替换”。如果我再次右键单击,则显示的上下文菜单是所需的“添加新组”。从这里开始,所有的工作都在启动一个窗口进入一个新组等方面。
我也不是 100% 确定如何检查上下文菜单是否为空,所以也许这就是我所缺少的。任何关于我所缺少的解决方法的方向或 cmets 将不胜感激。
树视图的 XAML:
<TreeView x:Name="TreeViewDisplay"
Grid.Row="0"
Grid.Column="0"
DockPanel.Dock="Left"
Margin="5 5 0 5"
MinWidth="180"
SelectedItemChanged="TreeViewDisplay_SelectedItemChanged"
ContextMenuOpening="treeviewContextMenu_ContextMenuOpening">
<TreeView.ContextMenu>
<ContextMenu x:Name="treeviewContextMenu"
Style="{StaticResource baseControlStyle}" >
<MenuItem Header="This will be replaced." />
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
背后的代码:
private void treeviewContextMenu_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
FrameworkElement fe = e.Source as FrameworkElement;
TreeViewItem selectedTreeViewItem = e.Source as TreeViewItem;
string selectedTreeViewItemHeader = selectedTreeViewItem.Header.ToString();
if (selectedTreeViewItemHeader == "Clients")
{
fe.ContextMenu = TreeViewContextMenuIfTopLevelSelected();
}
else
{
MessageBox.Show("no menu to display");
}
}
ContextMenu TreeViewContextMenuIfTopLevelSelected()
{
// This is the menu that will show if the top level treeview item is selected
ContextMenu topLevelMenu = new ContextMenu();
// Define menu items
MenuItem addNewGroup = new MenuItem();
addNewGroup.Header = "Add New Group";
addNewGroup.Click += addNewGroup_Click;
// add menuitems defined above to the menu
topLevelMenu.Items.Add(addNewGroup);
return topLevelMenu;
}
void addNewGroup_Click(object sender, RoutedEventArgs e)
{
AddNewGroup newGroupAdd = new AddNewGroup();
newGroupAdd.Closed += new EventHandler(RefreshTreeView);
newGroupAdd.Show();
}
private void RefreshTreeView(object sender, EventArgs e)
{
TreeViewDisplay.Items.Clear();
GetTreeViewGroupList();
}
【问题讨论】:
-
我能够弄清楚这一点。由于我没有足够的声望点,它不会让我在 8 小时内发布我的答案,所以我稍后会尝试发布我想出的答案。
标签: c# wpf xaml treeview contextmenu