首页 文章

运行时更改Windows 8.1 XAML商店应用程序的资源字典

提问于
浏览
0

我试图在运行时动态更改我的应用程序的资源字典定义 .

我这样做是因为我希望根据视图端口大小为我的应用程序提供不同的字体大小,缩放等 .

我目前有以下代码,每次视图端口大小更改时执行:

string stylesPath;

if (args.Type == "small")
{
    stylesPath = "ms-appx:///Styles/small.xaml";
}
else
{
    stylesPath = "ms-appx:///Styles/standard.xaml";
}

var resourceDictionary = new ResourceDictionary
{
    Source = new Uri(stylesPath, UriKind.RelativeOrAbsolute)
};

Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);

这适用于初始加载 . 当我更改我的视口时,这个代码会再次被击中,但在清除并重新加载资源字典后,我的应用程序的字体/样式/等根本不会改变 .

应用程序启动时,应用程序样式似乎只会加载一次 .

有没有人知道我可以强制我的应用程序根据新的资源字典值重绘自己的方式?

1 回答

  • 1

    这可以使用主题来完成 . 有一个方便的nuget package,称为主题管理器,可以很容易地切换主题 .

    而不是在应用程序加载上加载主题,而是将它们放在您的应用程序ThemeDictionaries中

    <ResourceDictionary.ThemeDictionaries>
        <ResourceDictionary x:Key="Dark">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Themes/small.xaml"/>
                <ResourceDictionary Source="/Themes/standard.xaml"/>
            </ResourceDictionary.MergedDictionaries>
       </ResourceDictionary>
    </ResourceDictionary.ThemeDictionaries>
    

    然后你可以像这样改变主题:

    var url = new Uri(string.Format("ms-appx:///Themes/{0}.xaml", (args.Type == "small") ? "small" : "standard"));
    ThemeManager.ChangeTheme(url);
    

    您可以阅读有关ThemeManager here的更多信息 .

相关问题