Design-Time Resourcedictionaries 设计时资源字典

18 浏览
0 Comments

Design-Time Resourcedictionaries 设计时资源字典

我创建了类似于这个这个的东西。

实际上,我有一个供应应用程序的“样式器”的dll - 它包含了所有基本样式以及调用StylerFactory.DefaultStyler.ApplyStyles(this)在应用程序上的工厂 - 它会将提供的ResourceDictionaries与现有的合并。这样,我就不需要将所有基本样式放在我的组件中,也不需要对资源xaml文件进行显式引用。

现在 - 虽然这个方法非常有效。但是这些样式在设计时是看不到的。

对于我的问题:

  1. 这种方法明智吗,还是在每个应用程序/窗口/控件中部署xaml资源并使用它们会更好?
  2. 有人知道是否有可能将我的样式应用于VS2008的设计时显示?
0
0 Comments

在我看来,这是一种可以接受的方法。原因是,我还没有看到更好的方法。

在我自己的案例中,我使用我在这里描述的代码在运行时加载资源字典,我认为这种方法也适用于从其他程序集加载资源。缺点是设计师不会首先运行此代码,这意味着默认情况下不会应用任何样式,这就是你所遇到的问题。

为了解决这个问题,在我需要在设计时编辑的每个<Window.Resources>中,我添加了一个默认的<ResourceDictionary.MergedDictionaries>定义。虽然这样做有点多余,但这样我可以在设计时拥有一个可工作的窗口,而正确的MergedDictionary可以在运行时加载。也许你可以使用这个方法来找到更好的解决办法。

Will,在问题#786183中你所描述的情况与我所做的非常相似,但是我的xaml文件是作为嵌入式资源的。所以按照你的建议,我必须复制资源文件...

即使资源文件作为另一个DLL的嵌入式资源,我认为按照stackoverflow.com/questions/946869/…中所述的方式包含资源应该是可行的。你试过这样做并发现不行吗?

是的和不是的,当然 - 如果我包含了资源,设计师会显示它们,但是那样我就会有重复的资源。我开始觉得最好是构建一个xaml文件,在源代码中使用svn:external包含它 - 这样我确保只有一个“真正”的副本,并让设计师显示更改...

0