尝试从xamarin表单获取本机元素时,GetNativeElement()返回null

时间:2020-04-02 07:26:14

标签: xamarin.forms uwp xamarin.uwp

因此,我将Xamarin表单View作为参数传递给UWP中的依赖项服务,以对传递的View进行屏幕截图。

代码如下:

public async Task<byte[]> CaptureView(View view)
        {
            if (Platform.GetRenderer(view) == null)
            {
                Platform.SetRenderer(view, Platform.CreateRenderer(view));
            }
            var renderer = Platform.GetRenderer(view);
            var nativeView = renderer?.GetNativeElement();
            if(nativeView == null)
            {
                renderer?.SetElement(view);
                nativeView = renderer?.GetNativeElement();
            }
            return await ReturnStream(nativeView);
        }



private async Task<byte[]> ReturnStream(UIElement content)
        {
            var renderTargetBitmap = new RenderTargetBitmap();
            await renderTargetBitmap.RenderAsync(content);
            var pixelpuffer = await renderTargetBitmap.GetPixelsAsync();
            var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
            IRandomAccessStream stream = new InMemoryRandomAccessStream();
            BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
            encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Fant;
            encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, logicalDpi, logicalDpi, pixelpuffer.ToArray());
            await encoder.FlushAsync();
            byte[] resultingBuffer = new byte[stream.Size];
            await stream.ReadAsync(resultingBuffer.AsBuffer(), (uint)resultingBuffer.Length, InputStreamOptions.None);
            return resultingBuffer;
        }

即使我有View并且渲染器也不为null,我每次都会在CaptureView中将nativeView设置为null。

我试图捕获视图并将其图像作为字节返回[],稍后我将转换为imagesource并将其放置在视图中。

0 个答案:

没有答案