在插件架构

时间:2016-02-03 09:51:40

标签: wpf

我有一个WPF应用程序,它在运行时使用反射加载一些插件。我创建了一个使用MultiSelectTreeView库的新插件。如果我现在通过使用这个库的插件显示一个窗口,我会得到很多绑定错误:

  

System.Windows.Data警告:40:BindingExpression路径错误:'object'''MultiSelectTreeView'(Name ='')'上找不到'(Controls:MultiSelectTreeView.HoverHighlighting)'属性。 BindingExpression:路径=(对照:MultiSelectTreeView.HoverHighlighting); DataItem ='MultiSelectTreeView'(Name =''); target元素是'MultiSelectTreeViewItem'(Name =''); target属性是'HoverHighlighting'(类型'布尔')   System.Windows.Data警告:40:BindingExpression路径错误:在'对象'''MultiSelectTreeView'(Name ='')'上找不到'(Controls:MultiSelectTreeView.ItemIndent)'属性。 BindingExpression:路径=(对照:MultiSelectTreeView.ItemIndent); DataItem ='MultiSelectTreeView'(Name =''); target元素是'MultiSelectTreeViewItem'(Name =''); target属性是'ItemIndent'(类型'Int32')   System.Windows.Data警告:40:BindingExpression路径错误:在'对象'''MultiSelectTreeView'(Name ='')'上找不到'(Controls:MultiSelectTreeView.IsKeyboardMode)'属性。 BindingExpression:路径=(对照:MultiSelectTreeView.IsKeyboardMode); DataItem ='MultiSelectTreeView'(Name =''); target元素是'MultiSelectTreeViewItem'(Name =''); target属性是'IsKeyboardMode'(类型'Boolean')

树中每个项目的一个错误。树仍然有效,但它很慢。

有趣的是,如果我还将库添加到主应用程序并在从插件打开窗口之前使用树显示主应用程序中的窗口,则不会再出现任何错误首先按预期工作。

对我而言,这似乎是一个奇怪的WPF资源加载的东西。任何人都可以帮助我,因为我完全不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

如果你知道树视图库的pack URI资源文件,那么尝试将它合并到应用程序的资源字典中: -

var uri = new Uri("pack://application:,,,/The.Assembly.Name;component/blah/blah.xaml", UriKind.RelativeOrAbsolute);

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary { Source = uri });

我想你会想从你的插件中做到这一点,假设你有某种初始化'插件加载后调用的方法。