web-dev-qa-db-ja.com

Xamarin.Forms.Colorをプラットフォーム固有の色に変換する

Xamarin.Forms.Colorをプラットフォーム固有の色に変換する方法を探しています。たとえば、AndroidのAndroid.Graphics.Colorです。

R、G、BのようなXamarin.Forms.Colorのプロパティを確認しました。値には0または1しか含まれていないため、かなり価値がないようです。誰かが以前にこの問題を経験して解決しましたか?

21
bkardol

カスタムレンダラでこれを実行しようとしていると思います。

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);
57

現在、これはXamarin.Forms.Platform.Androidの "ToAndroid()"拡張メソッドで行うことができます。

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

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));
        }
    }
}

または、Brushhere のように直接使用します。

var converter = new ColorConverter();

Control.CurrentBrush =
    (SolidColorBrush)
        converter.Convert(Element.CurrentLineColor, null, null, null);
3
testing

ここでは以前の回答から離れていますが、XamarinはToAndroid()メソッドをColorExtensionsヘルパークラスに配置しています。

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

Xamarinが追加しましたToWindowsColor()(3.6リリースで考えています)。 ->

その後、それを行う必要があるだけです。YourColorObject.ToWindowsColor()そして、あなたはWindows.UI.Color

0
forlayo