为什么要加载PresentationFramework时需要使用“虚拟”代码行? - c#

我有一个非托管应用程序,它的某些用户界面使用WPF程序集。

最初,我遇到了如下异常:

未处理System.IO.FileNotFoundException消息:无法加载
文件或程序集'PresentationFramework ...

(与Changed framework version results in: Could not load file or assembly PresentationFramework?的原因不同)。

通过添加似乎强制或欺骗编译器/运行时加载DLL的C#代码行,我解决了此问题:

// Refers to an arbitrary enum in PresentationFramework.Classic.dll
var dummy = Microsoft.Windows.Themes.ClassicBorderStyle.None;

然后我在运行时也没有异常。

否则,对该DLL中任何内容的唯一引用是在XAML中。特别:

<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Classic;component/themes/Classic.xaml"/>

但是显然,此XAML参考不足以使DLL在运行时正确加载。

这种“虚拟”解决方案确实可以工作,但是我不明白为什么这样做是必要的,这让我觉得我错过了更重要的事情。

这是正确的解决方法吗?首先需要这样做的原因是什么?

参考方案

XAML和C#是两种不同的语言,具有独立的解析器和编译器。确实,早期的调试器对XAML运行时错误的支持围绕“不存在”。如果您遇到XAML编译器错误? C#编译器将只使用最后一个有效的XAML编译。

尽管您可能永远不使用它,但完全有可能在运行时动态加载XAML设计:https://blogs.msmvps.com/bsonnino/2016/07/21/loading-xaml-dynamically-part-1-loading-views-dynamically/

至此,编译器不能完全依赖XAML编写的内容。

XAML中的命名空间?它们只是关于将.NET类纳入XAML解析器的范围。他们对于代码的C#部分并没有真正感到满意。

在datagrid(wpf)中选择行索引 - c#

如何在datagrid中选择行索引? 事件SelectionChanged以下代码不起作用: private DataGridRow dgr = new DataGridRow(); private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { thi…

将GUI导出为XML? - c#

是否有工具采用C#或其他语言设计的GUI,可以采用屏幕布局并将其导出到XML文件,从而最终获得以XML术语表示的屏幕模板?以及获取XML文件并显示结果屏幕? c#参考方案 您是否在WPF中调查过XAML?您提到了C#,所以这似乎与您所要求的直接一致。http://en.wikipedia.org/wiki/XAML另一个好的出发点可能是:http://en.…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可