为不同的屏幕分辨率加载不同的资源字典

时间:2012-06-01 11:50:25

标签: c# wpf c#-4.0

我有一个资源字典,我在其中为我的应用程序定义了样式和控件模板。现在我想定义更多的资源字典来定位不同的屏幕分辨率,每个屏幕分辨率一个。如何在App.XAML中检测客户端屏幕分辨率并加载特定的资源字典?

我当前的App.XAML:

<ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources\BlueYellow\BlueYellowTheme.xaml" />
            </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

2 个答案:

答案 0 :(得分:1)

我认为你可以制作markupExtension,它根据分辨率返回适当的资源字典uri,并像这样使用它:

<ResourceDictionary Source="{ThemeUriAccordingToCurrentResolution}" />

答案 1 :(得分:1)

我可以看到能够根据屏幕分辨率切换资源的价值,你显然必须做一些工作,将大量的分辨率放到一个易于管理的短名单中,找到“最适合”的目前的一个,但在这里你去。

App.cs

protected override void OnStartup(StartupEventArgs e)
{
  // Get the width and height, you might want to at least round these to a few values.
  var width = System.Windows.SystemParameters.PrimaryScreenWidth;
  var height = System.Windows.SystemParameters.PrimaryScreenHeight;

  // make the resource path from them.
  string resourceName = string.Format("Themes\resource{0}x{1}", width, height);

  // Add the resource to the app.
  Application.Current.Resources.MergedDictionaries.Add((ResourceDictionary)Application.LoadComponent(new Uri(resourceName, UriKind.Relative)));

  base.OnStartup(e);
}