【发布时间】:2020-09-07 19:45:18
【问题描述】:
作为这个冗长解释的先驱,我查看了现有的帖子并没有找到我想要的东西,我也用谷歌搜索了这个问题,也没有找到任何解决我问题的方法。
我是一个自以为是的 C# WPF 菜鸟。 这是我的第一篇文章,我讨厌寻求帮助,因为我讨厌浪费别人的时间。但我发现自己处于一个我无法解决的境地。因此,如果有人可以帮助阐明这一点,我将不胜感激。
我正在开发 Autodesk Revit 插件。该解决方案由三个项目组成,
- Addin Project,是一个实现 Autodesk Reivt IExternalApplication 接口的类库,该接口注册到 Autodesk Revit。
- Manager Project 是一个 WPF 应用程序,当用户单击 Revit 用户界面中的按钮时,它会从 Addin 类库项目中调用。
- 安装程序,(与此问题无关)
我的问题与 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