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

本文关键字:布局 颜色 背景 WinRT Windows Phone | 更新日期: 2024-11-05 04:38:20

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

这导致我尝试设置应用程序页面背景主题画笔的样式,但没有成功。

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

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

任何帮助都非常感谢!

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

  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;