首页 > 解决方案 > 创建收藏按钮/链接/其他控件的用户可定义 WPF 菜单

问题描述

我希望有一个用户可定义的菜单栏,其中包含他们可以执行的“最喜欢的”操作列表。我有一个预定义的按钮菜单,它们将执行不同的操作(打开一个包含内容的新选项卡、更新记录等)。我希望用户能够选择其中一个控件,然后选择将其添加到他们的“最喜欢的操作”中,这是一个位于页面顶部的工具栏(目前通过上下文菜单完成)。理想情况下,用户还可以重新排序这个最喜欢的动作列表。

到目前为止,我已经尝试使用绑定到列表视图的 ObservableCollection 和 List 来解决问题的第一部分。在上下文菜单的点击方法上,我有以下内容:

        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            MenuItem mnu = sender as MenuItem;
            Button MyButton = null;

            if (mnu != null)
            {
                ContextMenu MyContextMenu = (ContextMenu)mnu.Parent;
                MyButton = MyContextMenu.PlacementTarget as Button;
            }
            dc.menuitems.Add(MyButton);
        }

该列表在我添加对象时有效,但是在触发 INPC 时确实存在问题。使用可观察集合时,出现以下错误:

System.ArgumentException: 'Must disconnect specified child from current parent Visual before attaching to new parent Visual.'

我怀疑这可能是因为我以某种方式没有创建元素的副本,而是重新分配它。

我的方法是最好的方法吗?如果是这样,我该如何解决我看到的错误?处理物品重新排序的最佳方式是什么?我无法找到有关创建此类控件的很多有用信息。

解决此问题后,我打算使用 JSON 或 XML 序列化程序将此集合存储在用户设置中,以使他们的收藏夹在应用程序启动时保持不变。这是存储这些信息的最佳方式吗?

标签: c#wpf

解决方案


推荐阅读