Xamarin表单中的自定义通用OnPlatform问题

时间:2017-01-06 15:49:56

标签: xaml xamarin uwp xamarin.forms cross-platform

我正在为Android,iOS,WinPhone和UWP开发多平台应用。我已经编写了自定义通用的OnPlatform类来实现特定平台的TextColor更改。标准版' OnPlatform'在XAML中只有iOS,Android和WinPhone。我需要的是UWP(见下面的代码)

public class OnPlatformExt<T> : OnPlatform<T>
    {
        public T Android { get; set; }
        public T iOS { get; set; }
        public T WinPhone { get; set; }
        public T Windows { get; set; }
        public T Other { get; set; }

        public OnPlatformExt()
        {
            Android = default(T);
            iOS = default(T);
            WinPhone = default(T);
            Windows = default(T);
            Other = default(T);
        }

        public static implicit operator T(OnPlatformExt<T> onPlatform)
        {
            switch (Xamarin.Forms.Device.OS)
            {
                case Xamarin.Forms.TargetPlatform.Android:
                    return onPlatform.Android;

                case Xamarin.Forms.TargetPlatform.iOS:
                    return onPlatform.iOS;

                case Xamarin.Forms.TargetPlatform.WinPhone:
                    return onPlatform.WinPhone;

                case Xamarin.Forms.TargetPlatform.Windows:
                    return onPlatform.Windows;

                default:
                    return onPlatform.Other;
            }
        }
    }

然后在App.xaml中汇编并在我的资源字典中用作

<local:OnPlatformExt x:TypeArguments="Color"
                iOS="#f0f8ff"
                Android="White"
                WinPhone="#008566"
                Windows="White"
                Other="White" x:Key="LightTextColor" />

一切都很好。但是这仍然没有为我的按钮风格改变这种特殊的颜色。我想说的是,当我使用正常的适当的OnPlatform x:TypeArguments =&#34; Color&#34; ...然后它在特定平台上变换颜色。你们知道这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

我检查了你的代码,发现没有错。我刚刚更改了您设置的颜色(请参阅下面的代码),然后我在MainPage.xaml中引用了资源字典,如BackgroundColor="{StaticResource Key=LightTextColor}"。它在(Xamarin.UWP&amp; Xamarin.Android)中运行良好。您可以尝试在您的计算机上卸载该应用程序,清理解决方案并重新部署吗?如果它不起作用。请试试我的演示:GitHub

<ResourceDictionary>
    <local:OnPlatformExt
        x:Key="LightTextColor"
        x:TypeArguments="Color"
        Android="Red"
        Other="White"
        WinPhone="White"
        Windows="#008566"
        iOS="#f0f8ff" />
</ResourceDictionary>