c# - 创建收藏按钮/链接/其他控件的用户可定义 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 序列化程序将此集合存储在用户设置中,以使他们的收藏夹在应用程序启动时保持不变。这是存储这些信息的最佳方式吗?
解决方案
推荐阅读
- java - 了解java内存使用情况
- python - 以数据框为条件以创建新的数据框 - Python
- regex - 为什么 OSX 上的“查找”在使用正则表达式时遇到问题?
- php - WordPress 管理员 ajax 无法正常工作
- python - 递归地将文本从一行添加到另一行
- java - 如果 Edittext 没有输入文本,如何显示敬酒?
- javascript - Apollo 客户端查询缺少字段 __typename
- javascript - 如何清除对输入表单上的“onKeyDown”做出反应的状态?
- javascript - 没有音频标签的 chrome 上没有来自 WebRCT 流的音频
- javascript - JQuery 有时会将用户带到页面顶部