【问题标题】:WPF ResourceDictionary converter resource not found when startup project is a class library启动项目为类库时未找到 WPF ResourceDictionary 转换器资源
【发布时间】:2020-09-07 19:45:18
【问题描述】:

作为这个冗长解释的先驱,我查看了现有的帖子并没有找到我想要的东西,我也用谷歌搜索了这个问题,也没有找到任何解决我问题的方法。

我是一个自以为是的 C# WPF 菜鸟。 这是我的第一篇文章,我讨厌寻求帮助,因为我讨厌浪费别人的时间。但我发现自己处于一个我无法解决的境地。因此,如果有人可以帮助阐明这一点,我将不胜感激。

我正在开发 Autodesk Revit 插件。该解决方案由三个项目组成,

  1. Addin Project,是一个实现 Autodesk Reivt IExternalApplication 接口的类库,该接口注册到 Autodesk Revit。
  2. Manager Project 是一个 WPF 应用程序,当用户单击 Revit 用户界面中的按钮时,它会从 Addin 类库项目中调用。
  3. 安装程序,(与此问题无关)

我的问题与 WPF 应用程序中的资源和 MergedDictionaries 有关。 我有各种我需要设置样式的控件的样式资源,还有数据和转换器资源。

我将资源添加到 App.axml 资源部分以及项目中的页面。原因是我的问题的一部分。

当用户单击以从 Addin 项目中打开 MainWindow 时,资源会出现无法找到“x”资源的问题。消息如下所示:

“异常:找不到名为 'FamTypeConverter' 的资源。资源名称区分大小写。”

转换器正在另一个资源文件中的 ListView CellTemplate 样式中使用。

奇怪的是资源文件包含其他可以正常工作的资源。但这尤其给我带来了问题。该资源是一个实现 IValueConverter 的转换器,目前在我解决此问题时不进行转换,它只返回 convert 和 convert back 方法的值。

我在同一个 *.CS 文件中有另一个转换器,称为“FileSizeConverter”,它只是将 INT 输入转换为格式化的文件大小字符串。资源在同一个字典中,并在同一个 *.CS 文件中指向它的转换器,不同的类(显然),女巫一个完美地工作。

我尝试使用静态和动态资源,将资源 xaml 文件的构建操作设置为页面、资源、嵌入式资源,结果没有变化。

我已经尝试将资源添加到页面本身,并尝试了相对和打包 url。似乎没有任何效果。我还必须将 MergedDictionaries 添加到主窗口、页面和 app.xaml 中,以使当前工作的资源能够工作。如果我不将资源添加到页面中,我会得到同样的错误,找不到“x”资源。

如果我将启动项目设置为 WPF 项目,则没有问题。所有资源都有效。 我认为问题是当Window在另一个项目中时,启动项目不会加载或缓存WPF项目中的资源。

我 80% 确定这与 WPF 应用程序扩展“应用程序”而类库没有这一事实有关!我认为应用程序类是加载资源的地方,但这是我缺乏知识的地方。

我不知道我是否走在正确的轨道上,或者我是否错过了明显的事情,以至于当我意识到错误时我会想踢自己。

对不起,冗长的解释,我希望我已经让自己清晰简洁。如果需要任何澄清,请随时提出要求。

提前谢谢你 德雷克克莱门茨

【问题讨论】:

    标签: c# wpf xaml exception resourcedictionary


    【解决方案1】:

    我最终将任何 GridView 样式移动到页面而不是资源字典。我认为这与导致问题开始的资源字典中使用的转换器有关。在页面上定义 GridView 可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2014-03-14
      相关资源
      最近更新 更多