C# 如何在 Windows Phone 8 WinRT 中更改根布局的背景颜色

C# How to change background color of root layout in Windows Phone 8 WinRT

我正在尝试更改 Windows Phone 8 (WinRT) 应用中主要内容区域的背景颜色。我尝试通过向网格和主列表视图添加边框来指定颜色(灰色)。问题是当我在页面之间导航时,我可以看到背景颜色从黑色变为灰色。

这导致我尝试设置 ApplicationPageBackgroundThemeBrush 的样式失败。

从这里开始,我继续尝试在 App.xaml.cs 中设置 RootFrame 颜色。但我只能找到针对 Silverlight 应用程序执行此操作的示例。我在 app.xaml.cs 中有一部分我认为是正确的 c# 代码,但我一直试图正确地制定它以实际指定颜色的十六进制值。

            rootFrame = new Frame();
            rootFrame.Background = new SolidColorBrush();

非常感谢任何帮助!

  1. 你可以使用这个:-

    rootFrame.Background =  new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0, 0));
    
  2. 或者如果你有十六进制字符串那么你可以使用这个方法:-

    public static SolidColorBrush GetColorFromHexa(string hexaColor)
    {
        return new SolidColorBrush(
            Color.FromArgb(
                255,
                Convert.ToByte(hexaColor.Substring(1, 2), 16),
                Convert.ToByte(hexaColor.Substring(3, 2), 16),
                Convert.ToByte(hexaColor.Substring(5, 2), 16)
            )
        );
    }
    
  3. 或者创建一个从十六进制值到 SolidColorBrush 的转换器作为 您也可以在其他地方使用的通用代码..

    namespace YourNamespaceHere
    {
        using System;
        using Windows.UI;
        using Windows.UI.Xaml.Data;
        using Windows.UI.Xaml.Media;
    
        public class HexToColorConverter : IValueConverter
        {
            /// <summary>
            /// Converts a hexadecimal string value into a Brush.
            /// </summary>
            public object Convert(object value, Type targetType, object parameter, string language)
            {   
                byte alpha;
                byte pos = 0;
    
                string hex = value.ToString().Replace("#", "");
    
                if (hex.Length == 8)
                {
                    alpha = System.Convert.ToByte(hex.Substring(pos, 2), 16);
                    pos = 2;
                }
                else 
                {
                    alpha = System.Convert.ToByte("ff", 16);
                }
    
                byte red = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    
                pos += 2;
                byte green = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    
                pos += 2;
                byte blue = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    
                return new SolidColorBrush(Color.FromArgb(alpha, red, green, blue));
            }
    
            /// <summary>
            /// And back again.
            /// </summary>
            public object ConvertBack(object value, Type targetType, object parameter, string language)
            {
                SolidColorBrush val = value as SolidColorBrush;
                return "#" + val.Color.A.ToString() + val.Color.R.ToString()  + val.Color.G.ToString() +  val.Color.B.ToString();
            }
        }
    }
    

这就是我的 App.xaml.cs 最终对我有用的东西:

if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();

SolidColorBrush color = new SolidColorBrush();
color.Color = (Windows.UI.ColorHelper.FromArgb(0xFF, 44, 50, 50));
rootFrame.Background = color;