簡體   English   中英

Windows 8.1 XAML存儲應用程序的運行時更改資源字典

[英]Runtime change Resource Dictionary for a Windows 8.1 XAML Store App

我正在嘗試在運行時動態更改應用程序的資源字典定義。

我這樣做是因為我想根據視口大小為我的應用程序使用不同的字體大小,縮放比例等。

我目前有以下代碼,每次查看端口大小更改時都會執行:

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);

這適用於初始負載。 當我更改視口時,此代碼確實再次被命中,但是在清除資源字典並重新加載后,我的應用程序的字體/樣式/等完全不變。

看來,應用程序樣式在應用程序啟動期間只會被加載一次。

有人知道我可以基於新資源字典值強制我的應用程序重新繪制自身的方法嗎?

這可以使用主題來完成。 有一個方便的nuget軟件包 ,稱為主題管理器,可以非常輕松地切換主題。

無需在應用程序加載時加載主題,而是將其放入應用程序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的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM