【问题标题】:WPF Loose XAML ResourceDictionaryWPF 松散 XAML 资源字典
【发布时间】:2014-01-30 19:12:03
【问题描述】:

我正在尝试在松散的 XAML 中使用 ResourceDictionary 并将其加载到运行时以向 WPF 应用程序提供模板和样式。我在本地目录中有可用的 XAML,并且正在使用 URI 在应用启动时将新的 ResourceDictionary 添加到 App.Current.Resources.MergedDictionaries。

当 XAML 进行解析时,它会在模板上爆炸,其中 TargetType 是来自正在使用它的程序集的自定义控件。

具体消息是:

'未能从文本'controls:CustomType'创建'Type'。'

我已经在顶部的 ResourceDictionary 中映射了命名空间:

xmlns:controls="clr-namespace:TEST.UI.WPF.Common.Controls"

那里有文章指出可以从松散的 XAML 加载 ResourceDictionaries,但我没有在这些松散的 XAML 文件中找到地址自定义类型。

感谢任何帮助!

【问题讨论】:

  • 您是否在代码中加载 ResourceDictionary,如果是,您是否在包含该自定义类型并正在使用 XAML 模板的程序集中执行此操作?
  • 是的,它正在应用程序启动时加载到包含自定义类型并使用 XAML 模板的程序集中。

标签: wpf xaml wpf-controls resourcedictionary


【解决方案1】:

由于您是在运行时加载它并且它不是在项目中构建的,因此 ResourceDictionary 不知道您的程序集。您必须将程序集包含在命名空间中才能被识别。

xmlns:controls="clr-namespace:TEST.UI.WPF.Common.Controls;assembly=Common"

将 ';assembly=yourAssembly' 添加到命名空间声明后,您应该能够运行您的应用程序。

【讨论】:

  • 谢谢,这对我也有帮助。虽然我不明白为什么在 MainWindow 的样式中需要它。 MainWindow 直接在应用程序项目中,而不是在不同的程序集中。尽管如此,它仍然有效,指定assemby=applicationname
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多