簡體   English   中英

WPF - 通過單擊適當的按鈕將主題從暗變為亮 - Avalonia

[英]WPF - Change theme from dark to light by clicking proper button - Avalonia

我想為用戶提供一個選項,通過單擊按鈕將主題從暗變為亮。

<Application xmlns="https://github.com/avaloniaui"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:MyApp"
         x:Class="CoreBackup.App">
<Application.DataTemplates>
    <local:ViewLocator/>
</Application.DataTemplates>

<Application.Styles>
    <StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
    <StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseDark.xaml"/>
  <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Default.xaml"/>
</Application.Styles>

如何從其他 ViewModel 訪問 Application.Styles?

我不知道問題是否解決了。 所以這可能有助於將主題從BaseDark切換到BaseLight

private void ChangeLayoutExecute(object o)
{
    // create new style
    var newStyle = new StyleInclude(new Uri("avares://AvaloniaApplicationTest/App.xaml"));
    newStyle.Source = new Uri("avares://Avalonia.Themes.Default/Accents/BaseLight.xaml");
    // load style to get access to the ressources
    var baseDarkStyle = newStyle.Loaded as Style;

    // get the original source (BaseDark)
    var ressourceFromAppXaml = ((Style)((StyleInclude)Application.Current.Styles[1]).Loaded).Resources;
    foreach (var item in baseDarkStyle.Resources)
    {
        // for secure lookup if the key exists for the resource otherwise create it
        if (ressourceFromAppXaml.ContainsKey(item.Key))
            ressourceFromAppXaml[item.Key] = item.Value;
        else
            ressourceFromAppXaml.Add(item.Key, item.Value);
     }

     // set source name for the new theme
     ((StyleInclude)Application.Current.Styles[1]).Source = new Uri("avares://Avalonia.Themes.Default/Accents/BaseLight.xaml");
}

暫無
暫無

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

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