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