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

Posted

技术标签:

【中文标题】Xamarin 表单中的自定义通用 OnPlatform 问题【英文标题】:Custom generic OnPlatform in Xamarin forms Issue 【发布时间】:2017-05-21 10:10:20 【问题描述】:

我正在为 androidios、WinPhone 和 UWP 开发多平台应用程序。我编写了自定义通用 OnPlatform 类来实现针对特定平台更改 TextColor。 XAML 中的标准“OnPlatform”只有 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="Color" ... 然后它会在特定平台上改变颜色。你们知道这段代码有什么问题吗?

【问题讨论】:

这对我也有用。用它来结合 OnPlatform 和 OnIdiom(iOS 到 iPhone 或 iPad) 【参考方案1】:

我检查了您的代码,没有发现任何问题。我刚刚更改了您设置的颜色(请参见下面的代码),然后我引用了 MainPage.xaml 中的资源字典,如下所示 BackgroundColor="StaticResource Key=LightTextColor"。它在(Xamarin.UWP 和 Xamarin.Android)中运行良好。您能否尝试卸载您机器中的应用程序,清理解决方案并重新部署它?如果它不起作用。请试试我的演示:GitHub。

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

【讨论】:

您好,非常感谢您检查我的代码。我想要实现的只是将 UWP 上的字体颜色更改为“白色”。代码确实有效..但“白色”没有。我也试过'#ffffff'。我决定在“白色”旁边放“雪”,现在正在工作(我不知道为什么..)。我已经清理并重建了我的代码,但主要的解决方案是卸载应用程序 :) 抱歉,感谢您抽出宝贵时间。

以上是关于Xamarin 表单中的自定义通用 OnPlatform 问题的主要内容,如果未能解决你的问题,请参考以下文章

django web 自定义通用权限控制

Android 自定义通用的loadingview

WPF报表自定义通用可筛选列头-WPF特工队内部资料

2.Android 自定义通用的Item布局

c_cpp 单片机C编程自定义通用队列接口

WPF报表自定义通用可筛选列头-WPF特工队内部资料