c# - XAML 中无法访问 Friend 程序集的内部成员
问题描述
问题陈述
我有两个程序集,一个主要包含数据合同,另一个包含 UI 层。
数据协定是公共的,并DataTemplate
在 UI 程序集中的 XAML 中的标记中使用。
<DataTemplate DataType="{x:Type contracts:MyContract}">
///other stuff
</DataTemplate>
数据合同是汇编,如下所示:
<xmlns:contracts="clr-namespace:Contracts.DataContracts,assembly=Contracts.DataContracts"
现在我想让一切都在内部 DataContract 程序集中,以保持较低的 API 表面。我在AssemblyInfo
DataContracts 程序集类中添加了 UI 程序集作为朋友程序集。但是,当我编译 UI 程序集时,我在 XAML 中收到以下错误:
Only public or internal classes can be used within markup. 'MyContract' type is not public or internal.
我已经检查过它InternalVisibleTo
是否正常工作,因为我可以在后面的代码中访问其他内部内容。但在 XAML 中这是不可能的。
有什么可能的方法来解决这个问题?
解决方案
不太清楚您试图从程序集扩展到应用程序的内容,但是当我在库中有 XAML 时,我倾向于在应用程序中以这种方式引用它。
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/PathInAssemblyIfNeeded/YourXAMLReferences.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
如果这没有帮助,请提供有关您要完成的工作的更多信息。
推荐阅读
- datetime - Power Query (M) - 当前月开始前的 12 个月
- php - 如何从 4 个不同的“场景”构建 PHP 中所有可能排列的数组?
- mysql - 如何将准备好的语句执行给用户?
- asp.net - Blazor 服务器应用程序 JavaScript 库不工作(Metronic 模板)
- npoi - 如何在 XSSFWorkbook 的 NPOI 中添加带有 quotePrefix 的单元格
- reactjs - 在 React Navigation Drawer 中放大 Auth.signOut()
- apache-spark - pyspark如何在窗口内聚合
- r - 有没有办法使用 base R 从 Excel 导入单个特定电子表格?
- angular - 从 BadRequest 获取错误消息
- firebase - 如何更新 Flutter Cloud Firestore 中的数据