0

我有一个测试应用程序,有 3 个按钮:

  • 一种用于将标题栏颜色更改为白色
  • 一种用于将标题栏颜色更改为黑色
  • 一种让应用程序标题栏自由跟随其应用程序标题栏的 Windows 10 主题颜色

前两个按钮可以正常工作,但最后一个我不知道如何实现以及在必要时将方法放在哪里。我想要任何帮助、提示,甚至是针对该问题的完整解决方案。先感谢您。PS:如果标题栏颜色可以跟随深色,浅色甚至高对比度的颜色,那就太好了。

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace App7
{
    public sealed partial class MainPage : Page
    {
        Windows.UI.ViewManagement.ApplicationViewTitleBar titleBar = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TitleBar;

        public MainPage()
        {
            this.InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            titleBar.BackgroundColor = Windows.UI.Colors.White;
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            titleBar.BackgroundColor = Windows.UI.Colors.Black;
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            //Title bar must be free to change its own colour accord/when/same time Windows theme change
            //How can I do that?
            //Where the code/methods goes?
        }
    }
}
4

1 回答 1

0

您可以处理UISettings ClassColorValuesChanged 事件。当 Windows 主题颜色更改时,将发生此事件。您可以获取 Windows 主题的当前颜色,以检查它是处于深色模式还是浅色模式。然后,您可以根据需要更改标题栏颜色。UISettings.GetColorValue()

这是代码:

public Windows.UI.ViewManagement.UISettings uiSettings { get; set; }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        uiSettings = new Windows.UI.ViewManagement.UISettings();
        uiSettings.ColorValuesChanged += UiSettings_ColorValuesChanged;

        // if you want to stop this.
        //uiSettings.ColorValuesChanged -= UiSettings_ColorValuesChanged;
    }

    private void UiSettings_ColorValuesChanged(Windows.UI.ViewManagement.UISettings sender, object args)
    {
        // happens when the windows theme is changed.
        // The color you get is either black(#FF000000) for dark theme or white(#FFFFFFFF) for light theme.
        Color backgroundcolor = uiSettings.GetColorValue(Windows.UI.ViewManagement.UIColorType.Background);
        // change titlebar color.
        Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TitleBar.BackgroundColor = backgroundcolor;
    }
于 2022-01-12T02:20:54.487 回答