我经常遇到设计问题,XAML设计师(WPF的“xdesproc”)会以一种方式显示我的控件,但在运行时则完全不同。通常这些差异是因为在运行时使用的静态资源(在应用程序级别)与设计师中使用的不同。
当一个大型解决方案由多个项目组成(其中大多数是用户控件库,而其中几个是启动项目(应用程序、测试用例等))时,这种情况发生得最多。
在使用VS编辑库中的用户控件时,我从Blend中发现了一个技巧,可以在项目中引入“DesignTimeResources.xaml”文件,Visual Studio会将其视为补充到用户控件本身中使用的资源中(就像它们在该用户控件的逻辑树中被找到一样)。
我认为这个技巧足以使我能够在设计师中省去应用程序级别的资源。然而,“DesignTimeResources.xaml”并没有解决我所有的问题。xdesproc也不认为这是足够的应用程序级别资源的来源(即xdesproc可能会同时将其加载为其应用程序级别资源和用户控件的逻辑树中的资源)。
通过监视xdesproc,我发现它的行为非常不寻常,以便找到它想要用于应用程序级别资源的东西。它使用的搜索机制似乎并不是很明确定义。如果不小心,它要么完全忽略建立任何应用程序级别资源,要么随机从外部解决方案中找到的一个项目中选择(这个项目可能与用户控件库无关,但被找到并被使用,因为它包含一个恰好是“Application/”的项目项)。
有人能告诉我在编辑用户控件时,xdesproc是否应该有一种定义明确的方式来查找应用程序级别的资源?我的解决方法是大量的琢磨和调整,涉及到卸载项目。我暂时卸载了所有带有“Application”元素的解决方案中的项目,除了一个。否则,xdesproc可能会随意选择其中一个并开始愉快地将其用作其应用级别资源。它似乎没有限制自己只使用VS IDE中的当前启动项目。
如果有什么指针可以帮助我理解xdesproc认为它应该使用什么应用程序资源,我将不胜感激。我怀疑它被编程成“聪明”的“能够正常工作”。在许多情况下,它可能确实有效,但当它失灵时就不行了。
当一个大型解决方案由多个项目组成(其中大多数是用户控件库,而其中几个是启动项目(应用程序、测试用例等))时,这种情况发生得最多。
在使用VS编辑库中的用户控件时,我从Blend中发现了一个技巧,可以在项目中引入“DesignTimeResources.xaml”文件,Visual Studio会将其视为补充到用户控件本身中使用的资源中(就像它们在该用户控件的逻辑树中被找到一样)。
我认为这个技巧足以使我能够在设计师中省去应用程序级别的资源。然而,“DesignTimeResources.xaml”并没有解决我所有的问题。xdesproc也不认为这是足够的应用程序级别资源的来源(即xdesproc可能会同时将其加载为其应用程序级别资源和用户控件的逻辑树中的资源)。
通过监视xdesproc,我发现它的行为非常不寻常,以便找到它想要用于应用程序级别资源的东西。它使用的搜索机制似乎并不是很明确定义。如果不小心,它要么完全忽略建立任何应用程序级别资源,要么随机从外部解决方案中找到的一个项目中选择(这个项目可能与用户控件库无关,但被找到并被使用,因为它包含一个恰好是“Application/”的项目项)。
有人能告诉我在编辑用户控件时,xdesproc是否应该有一种定义明确的方式来查找应用程序级别的资源?我的解决方法是大量的琢磨和调整,涉及到卸载项目。我暂时卸载了所有带有“Application”元素的解决方案中的项目,除了一个。否则,xdesproc可能会随意选择其中一个并开始愉快地将其用作其应用级别资源。它似乎没有限制自己只使用VS IDE中的当前启动项目。
如果有什么指针可以帮助我理解xdesproc认为它应该使用什么应用程序资源,我将不胜感激。我怀疑它被编程成“聪明”的“能够正常工作”。在许多情况下,它可能确实有效,但当它失灵时就不行了。