Xamarin 表单中的自定义通用 OnPlatform 问题
Posted
技术标签:
【中文标题】Xamarin 表单中的自定义通用 OnPlatform 问题【英文标题】:Custom generic OnPlatform in Xamarin forms Issue 【发布时间】:2017-05-21 10:10:20 【问题描述】:我正在为 android、ios、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 问题的主要内容,如果未能解决你的问题,请参考以下文章