1

我正在尝试以编程方式设置当前的 WPF Application ResourceDictionary。(我有一个 WindForms 项目,所以没有“App.xaml”可以为我做这件事)。

注意:如果有人知道如何将 Application.Resources 的等效项绑定到 ElementHost及其所有子控件层次结构,这就是这里的最终目标。

我添加到我的代码中:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Middlewerks;component/Resources.xaml", UriKind.RelativeOrAbsolute) });

现在它在应用程序中完美运行,样式很好(即:网格的背景是红色的。这只是一种测试样式)。

但是如果我在设计器中打开这个表单,Visual Studio 就会发疯。整个橱窗都是我的风格!

这是一个屏幕截图:http ://localhostr.com/files/8368cc/Failure.jpg 很酷的部分是我发现了如何编辑 Visual Studio 2010 丑陋的蓝色皮肤。可悲的是,当我的客户在我的控制下开发时,他们不会感到高兴。

随意尝试并告诉我应该如何在不搞砸一切的情况下实现我的资源。

XAML 代码:(如屏幕截图所示)

编辑:这是我临时的、非常老套的解决方案,所以我可以继续开发。“Application.Current”在 Visual Studio 上工作确实很痛苦。

if (Application.Current.MainWindow == null || !Application.Current.MainWindow.Title.EndsWith(" - Microsoft Visual C# 2010 Express"))
{
    Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Middlewerks;component/Resources.xaml", UriKind.RelativeOrAbsolute) });
}
4

1 回答 1

0

当我在使用 WPF 区域的 WinForms 项目上工作时,我只是使用 MergedDictionaries 来引入我需要的资源,只要我需要它们。

<Window.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="DefaultResourceDictionary.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Window.Resources>

你能摆脱它吗?如果您需要以编程方式执行更多操作,您仍然可以在字典中添加代码。

您可以在任何元素的任何级别上使用它。也就是说,它不必是Window此处所示的 a。

于 2010-09-03T00:12:24.127 回答