【发布时间】:2023-03-27 11:05:01
【问题描述】:
我经常受到设计器问题的困扰,即 XAML 设计器(WPF 的“xdesproc”)将以一种方式显示我的控件,但在运行时它们将以完全不同的方式显示。这些差异通常归结为运行时(应用程序级别)使用的静态资源不是设计器中使用的。
这主要发生在大型解决方案由多个项目组成时 - 其中大部分是用户控件库,其中一些是启动项目(应用程序、测试工具等)。
在使用 VS 编辑其中一个库中的用户控件时,我从 Blend 中发现了一个技巧,您可以在项目中引入“DesignTimeResources.xaml”文件,Visual Studio 将“尊重”它并合并这些资源作为用户控件本身的补充(就好像它们已在该用户控件的逻辑树中找到一样)。
我认为这个技巧就足够了,这样我就可以放弃设计器中对应用程序级资源的需求。但是,“DesignTimeResources.xaml”并不能解决我所有的问题。 xdesproc 也不认为这是足够的应用程序级资源来源(即 xdesproc 可能会考虑将此 both 作为其应用程序级资源 and 加载到如果需要,用户可以控制。)
在使用 procmon 窥探 xdesproc 后,我发现它以非常不寻常的方式运行,以便找到它想要用于其 应用程序级 资源的东西。它使用的搜索机制确实不看起来非常明确。如果一个人不小心,它要么完全忽略建立任何应用程序级资源,要么从它可能在外部解决方案中找到的项目之一中随机选择(一个可能不相关的项目)以任何方式到用户控件库,但被发现并被使用是因为它包含一个恰好是“应用程序/”的项目项。
有人能告诉我在编辑用户控件时是否应该有一种明确定义的方式让 xdesproc 找到 应用程序级 资源?我的解决方法是大量涉及卸载项目的强迫性修补。我暂时从我的解决方案中卸载所有具有“应用程序”元素的项目,但一个除外。除非我这样做,否则 xdesproc 可能会随机选择其中一个并开始愉快地将其用于其应用程序级资源。它似乎并不局限于 VS IDE 中的当前启动项目。
如果有任何指针可以帮助我理解 xdesproc 认为它应该用于其应用程序资源的内容,我将不胜感激。我怀疑它被编程为“智能”和“正常工作”。它可能在许多情况下都有效,除非它不起作用。
【问题讨论】: