【问题标题】:Convert Xamarin.Forms.Color to platform specific color将 Xamarin.Forms.Color 转换为平台特定颜色
【发布时间】:2014-09-30 06:42:21
【问题描述】:

我正在寻找一种将 Xamarin.Forms.Color 转换为平台特定颜色的方法。例如 Android 的 Android.Graphics.Color。

我查看了 Xamarin.Forms.Color 的属性,例如 R、G 和 B。这些值仅包含 0 或 1,因此这似乎毫无价值。以前有人经历过并解决过这个问题吗?

【问题讨论】:

    标签: android ios colors xamarin xamarin.forms


    【解决方案1】:

    我猜你尝试在自定义渲染器中执行此操作。

    在 iOS 中,您可以:

    UIColor uicolor = yourXFColor.ToUIColor ();
    

    在 Android 中:

    Android.Graphics.Color adColor = yourXFColor.ToAndroidColor ();
    

    不幸的是,等效的扩展方法不是公开的对于 WP,但你可以这样做:

    System.Windows.Media.Color wpColor = System.Windows.Media.Color.FromArgb (
                (byte)(yourXFColor.A * 255),
                (byte)(yourXFColor.R * 255),
                (byte)(yourXFColor.G * 255),
                (byte)(yourXFColor.B * 255));
    

    然后最终:

    Brush brush = new SolidColorBrush (wpColor);
    

    【讨论】:

    • 谢谢!它正在工作。我在一个自定义渲染器使用的类中尝试它。现在我正在转换颜色@渲染器并将平台特定颜色传递给对象。
    • 我想xpColor@你答案的最后一行是错字?
    • 仅供参考,Xamarin.Forms 上缺少扩展使我将其添加到 Xamarin.Forms.Labs(开源社区 XF 附加组件):github.com/XForms/Xamarin-Forms-Labs/blob/master/src/…
    • @StephaneDelcroix 我找不到像ToAndroidColor ();这样的扩展名
    • 现在看来,将Xamarin.Forms.Color转换为Android颜色的扩展方法是:XFColor.ToAndroid();
    【解决方案2】:

    目前您可以使用 Xamarin.Forms.Platform.Android 中的“ToAndroid()”扩展方法来执行此操作。

    using Xamarin.Forms.Platform.Android;
    Android.Graphics.Color droidColor = formsColor.ToAndroid();
    

    【讨论】:

      【解决方案3】:

      此处不再使用以前的答案,但 Xamarin 现在已将 ToAndroid() 方法放置在 ColorExtensions 帮助器类中。

      using Xamarin.Forms.Platform.Android
      ....
      Android.Graphics.Color color = ColorExtensions.ToAndroid(formsColor);
      

      【讨论】:

        【解决方案4】:

        以下是一些适用于 Windows 的方法:

        举个例子this分机:

        using System;
        
        namespace Xamarin.Forms.Platform.WinRT
        {
            public static class ColorExtensions
            {
                public static Windows.UI.Color ToWindows(this Xamarin.Forms.Color color)
                {
                    return Windows.UI.Color.FromArgb(Convert.ToByte(color.A * 255), Convert.ToByte(color.R * 255), Convert.ToByte(color.G * 255), Convert.ToByte(color.B * 255));
                }
            }
        }
        

        或者直接使用Brush,比如here

        var converter = new ColorConverter();
        
        Control.CurrentBrush =
            (SolidColorBrush)
                converter.Convert(Element.CurrentLineColor, null, null, null);
        

        【讨论】:

          【解决方案5】:

          Xamarin have addedToWindowsColor()(我认为是 3.6 版本)。 ->

          那么只需要做..YourColorObject.ToWindowsColor() 然后你就有了Windows.UI.Color

          【讨论】:

            【解决方案6】:

            使用Xamarin.Essentials的解决方案:

            var xfColor = Xamarin.Forms.Color.FromRgba(219, 52, 152, 255);
            
            // Extension to convert
            // using Xamarin.Essentials;
            var platformColor = xfColor.ToPlatformColor();
            

            链接:https://docs.microsoft.com/en-us/xamarin/essentials/color-converters

            【讨论】:

              猜你喜欢
              • 2017-01-04
              • 2022-08-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-11-14
              • 2019-02-08
              相关资源
              最近更新 更多