需要安装nuget包:
Xamarin.Controls.SignaturePad.Forms
前台关键代码:
<Grid x:Name="LayoutRoot" Padding="12"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="12" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <ContentView Padding="1" BackgroundColor="#B8860B"> <controls:SignaturePadView x:Name="signatureView" SignatureLineColor="Transparent" PromptText="" CaptionText="" ClearText="清空" HeightRequest="100" ClearTextColor="#B8860B" BackgroundColor="#FAFAD2" /> </ContentView> <Button x:Name="btnLoad" Text="数据库最新签名" Clicked="LoadVectorClicked" HorizontalOptions="Center" VerticalOptions="End" Grid.Row="2" /> <Button x:Name="btnSaveImage" Text="保存签名" Clicked="SaveImageClicked" HorizontalOptions="End" VerticalOptions="End" Grid.Row="2" /> </Grid>
xmlns:controls="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms"
后台关键代码:
/// <summary> /// 从数据库加载保存的图片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LoadVectorClicked(object sender, EventArgs e) { var bytes = Context.TestImageEntry.OrderByDescending(r=>r.Id).FirstOrDefault().SignatureImg; var stream = new MemoryStream(bytes); mImge.Source = ImageSource.FromStream(() => stream); } private async void SaveImageClicked(object sender, EventArgs e) { bool saved; using (var bitmap = await signatureView.GetImageStreamAsync(SignatureImageFormat.Png, Color.Black, Color.White, 1f)) { saved = await OnSaveSignature(bitmap); } if (saved) await DisplayAlert("Signature Pad", "签名保存成功.", "OK"); else await DisplayAlert("Signature Pad", "签名保存失败.", "OK"); } /// <summary> /// 保存图片到数据库 /// </summary> /// <param name="bitmap"></param> /// <returns></returns> private async Task<bool> OnSaveSignature(Stream bitmap) { using MemoryStream ms = new MemoryStream(); bitmap.CopyTo(ms); Context.TestImageEntry.Add(new Models.Entity.TestImageEntry { SignatureImg = ms.ToArray() }); await Context.SaveChangesAsync(); return true; }
运行起来的效果:
参考:https://github.com/wx0322/SignaturePad (从官网fork过来的)
(完)