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

本文关键字:资源 字典 加载 屏幕 分辨率 | 更新日期: 2023-09-27 18:36:04

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

我当前的应用程序.XAML :

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

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

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

<ResourceDictionary Source="{ThemeUriAccordingToCurrentResolution}" />

我可以看到能够根据屏幕分辨率切换资源的价值,您显然必须做一些工作才能将大量分辨率降低到一个可管理的简短列表中,并为当前找到"最合适"的分辨率,但在这里你去。

应用.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);
}