Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建动态可扩展工具箱_C#_Wpf_Menu_Itemscontrol_Multiple Instances - Fatal编程技术网

C# 创建动态可扩展工具箱

C# 创建动态可扩展工具箱,c#,wpf,menu,itemscontrol,multiple-instances,C#,Wpf,Menu,Itemscontrol,Multiple Instances,我正在尝试创建一个动态的可扩展工具箱,如下图所示。 自定义控件将根据可用空间在基本菜单和高级菜单中放置不同的项。如果有足够的空间显示基本菜单中的所有项目,则不会显示高级菜单。 我已经创建了这个控件,只要我在应用程序中只使用一次,它就可以工作。如果我多次实例化它,我会得到下面的异常,考虑到我只是将一个元素添加到一个非静态列表中,我很难理解这个异常 是否有人对如何以不同方式创建此控件以避免此问题有其他想法,或者知道是什么导致了此异常 链接到解决方案:(要重现问题,只需取消对MainWindow.

我正在尝试创建一个动态的可扩展工具箱,如下图所示。

自定义控件将根据可用空间在基本菜单和高级菜单中放置不同的项。如果有足够的空间显示基本菜单中的所有项目,则不会显示高级菜单。 我已经创建了这个控件,只要我在应用程序中只使用一次,它就可以工作。如果我多次实例化它,我会得到下面的异常,考虑到我只是将一个元素添加到一个非静态列表中,我很难理解这个异常

是否有人对如何以不同方式创建此控件以避免此问题有其他想法,或者知道是什么导致了此异常

链接到解决方案:(要重现问题,只需取消对MainWindow.xaml第15行的注释


任何帮助

您的问题在于
按钮项控件
类的依赖属性声明:

public ObservableCollection<FrameworkElement> BasedMenuItems
{
    get { return (ObservableCollection<FrameworkElement>)GetValue(BasedMenuItemsProperty); }
    set { SetValue(BasedMenuItemsProperty, value); }
}
public static readonly DependencyProperty BasedMenuItemsProperty =
        DependencyProperty.Register("BasedMenuItems", typeof(ObservableCollection<FrameworkElement>), typeof(ButtonsItemsControl),
        new PropertyMetadata(new ObservableCollection<FrameworkElement>()));

这似乎与直觉相反,但据我所知,没有更好的方法(实际上,框架在内部使用工厂对象来创建新的类实例以生成唯一的默认值,但出于某种原因,它们没有在框架之外公开这些工厂).

非常感谢,我真的没有主意了,我学到了一些东西。
public ButtonsItemsControl()
{
    BasedMenuItems = new ObservableCollection<FrameworkElement>();
    ...
}