【发布时间】:2020-03-16 05:20:15
【问题描述】:
我有在iOS xamarin 表单上工作的自定义渲染代码,但我想要UWP 类似,
using System;
using MobileAssessment.Interface;
using MobileAssessment.iOS;
using MobileAssessment.Pages;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using iOSPlatform = Xamarin.Forms.Platform.iOS.Platform;
[assembly: Xamarin.Forms.Dependency(typeof(ILoadingPageServiceiOS))]
namespace MobileAssessment.iOS
{
public class ILoadingPageServiceiOS : ILodingPageService
{
private UIView _nativeView;
private bool _isInitialized;
public void ShowLoadingPage()
{
// check if the user has set the page or not
if (!_isInitialized)
InitLoadingPage(new LoadingIndicatorPage()); // set the default page
// showing the native loading page
UIApplication.SharedApplication.KeyWindow.AddSubview(_nativeView);
}
public void HideLoadingPage()
{
_nativeView.RemoveFromSuperview();
}
public void InitLoadingPage(ContentPage loadingIndicatorPage = null)
{
// check if the page parameter is available
if (loadingIndicatorPage != null)
{
// build the loading page with native base
loadingIndicatorPage.Parent = Xamarin.Forms.Application.Current.MainPage;
loadingIndicatorPage.Layout(new Rectangle(0, 0,
Xamarin.Forms.Application.Current.MainPage.Width,
Xamarin.Forms.Application.Current.MainPage.Height));
var renderer = loadingIndicatorPage.GetOrCreateRenderer();
_nativeView = renderer.NativeView;
_nativeView.BackgroundColor = UIColor.Black;
_nativeView.Alpha = (System.nfloat)0.7;
_isInitialized = true;
}
}
}
internal static class PlatformExtension
{
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable)
{
var renderer = iOSPlatform.GetRenderer(bindable);
if (renderer == null)
{
renderer = iOSPlatform.CreateRenderer(bindable);
iOSPlatform.SetRenderer(bindable, renderer);
}
return renderer;
}
}
}
我已经为 UWP 尝试了以下代码,
using System;
using MobileAssessment.Interface;
using MobileAssessment.UWP;
using MobileAssessment.Pages;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.UWP;
using uwpPlatform = Xamarin.Forms.Platform.UWP.Platform;
[assembly: Xamarin.Forms.Dependency(typeof(ILoadingPageServiceRenderer))]
namespace MobileAssessment.UWP
{
public class ILoadingPageServiceRenderer : ILodingPageService
{
private View _nativeView;
private bool _isInitialized;
public void ShowLoadingPage()
{
// check if the user has set the page or not
if (!_isInitialized)
InitLoadingPage(new LoadingIndicatorPage()); // set the default page
// showing the native loading page
Application.SharedApplication.KeyWindow.AddSubview(_nativeView);
}
public void HideLoadingPage()
{
_nativeView.RemoveFromSuperview();
}
public void InitLoadingPage(ContentPage loadingIndicatorPage = null)
{
// check if the page parameter is available
if (loadingIndicatorPage != null)
{
// build the loading page with native base
loadingIndicatorPage.Parent = Xamarin.Forms.Application.Current.MainPage;
loadingIndicatorPage.Layout(new Rectangle(0, 0,
Xamarin.Forms.Application.Current.MainPage.Width,
Xamarin.Forms.Application.Current.MainPage.Height));
var renderer = loadingIndicatorPage.GetOrCreateRenderer();
_nativeView = renderer.NativeView;
_nativeView.BackgroundColor = Color.Black;
_nativeView.Alpha = (System.nfloat)0.7;
_isInitialized = true;
}
}
}
internal static class PlatformExtension
{
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable)
{
var renderer = uwpPlatform.GetRenderer(bindable);
if (renderer == null)
{
renderer = iOSPlatform.CreateRenderer(bindable);
uwpPlatform.SetRenderer(bindable, renderer);
}
return renderer;
}
}
}
上面的活动指示器代码实际上来自https://github.com/UdaraAlwis/Xamarin-Playground/tree/master/XFLoadingPageService
但是论坛没有为 UWP 共享相同的解决方案,所以我为 windows 创建了我的代码。
【问题讨论】:
标签: xamarin xamarin.forms xamarin.ios xamarin.uwp