【发布时间】:2018-07-19 15:06:29
【问题描述】:
我将 SignaturePad 点存储到数据库中,目的是提取并存储到 PDF。得到它的工作,除了添加点到 SignaturePadView 对象。
要加分,我只是使用 signaturePad.Points = points.这种方法在插入显示到屏幕的 XAML SignaturePad 元素时效果很好......但存储到代码生成的 Object 会导致数组长度为零。
我在这两种情况下的代码如下。
我的问题是:
在尝试将点分配给生成的 SignaturePadView 时,我是否遗漏了一个步骤,和/或我没有呈现到屏幕(直接存储到 PDF)这一事实是否是一个潜在问题
XAML
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:H1PaperlessApp"
xmlns:forms="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms"
x:Class="H1PaperlessApp.Views.Temppage"
Padding="10">
<StackLayout>
<forms:SignaturePadView x:Name="PadView"
HeightRequest="150"
WidthRequest="240"
BackgroundColor="White"
StrokeColor="Black"
StrokeWidth="2"/>
<forms:SignaturePadView x:Name="ClonePadView"
HeightRequest="150"
WidthRequest="240"
BackgroundColor="White"
StrokeColor="Black"
StrokeWidth="2"/>
<Button Text="Save" FontSize="30" BackgroundColor="DodgerBlue" TextColor="White"
Clicked="SaveButton_Clicked"/>
</StackLayout>
</ContentPage>
代码隐藏(从一个 XAML 生成的元素克隆到另一个)。在这种情况下,第二个 Points 设置正确
private async void SaveButton_Clicked(object sender, EventArgs e)
{
var pnts = PadView.Points.ToArray(); // pnts = {Xamarin.Forms.Point[294]}
var originalPoints = JsonConvert.SerializeObject(pnts);
Xamarin.Forms.Point[] points = JsonConvert.DeserializeObject<Xamarin.Forms.Point[]>(originalPoints);
ClonePadView.Points = points; // ClonePadView.Points = {Xamarin.Forms.Point[294]}
Stream img = await ClonePadView.GetImageStreamAsync(SignatureImageFormat.Png);
}
后面的代码(通过代码创建目标 SignaturePadView。注意第二个点的计数为 0)
private async void SaveButton_Clicked(object sender, EventArgs e)
{
var pnts = PadView.Points.ToArray(); // pnts = {Xamarin.Forms.Point[294]}
var originalPoints = JsonConvert.SerializeObject(pnts);
Xamarin.Forms.Point[] points = JsonConvert.DeserializeObject<Xamarin.Forms.Point[]>(originalPoints);
SignaturePadView CodeClonePadView = new SignaturePadView { };
CodeClonePadView.Points = points; // ClonePadView.Points = {Xamarin.Forms.Point[0]}
Stream img = await CodeClonePadView.GetImageStreamAsync(SignatureImageFormat.Png);
}
【问题讨论】:
-
我通过在 UI 线程中调用分配修复了 Xamarin.iOS 中的问题。在 Xamarin.Android 中,此解决方案不起作用。
-
也许您应该先将代码创建的签名视图添加到布局中?否则它应该如何渲染任何东西?
标签: c# xaml xamarin.forms