DrawingView
, DrawingView
dokunma veya fare etkileşimi kullanarak çizgilerin çizılmasına olanak tanıyan bir yüzey sağlar. Bir kullanıcı çiziminin sonucu görüntü olarak kaydedilebilir.
Bunun yaygın bir kullanım örneği, bir uygulamada imza kutusu sağlamaktır.
Temel kullanım
DrawingView
çizgi rengini, çizgi genişliğini ve çizgi koleksiyonuna bağlamayı sağlar.
XAML
XAML ad alanını dahil edin
Araç setini XAML'de kullanmak için sayfanıza veya görünümünüzde aşağıdakilerin xmlns
eklenmesi gerekir:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Bu nedenle aşağıdakiler:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
</ContentPage>
aşağıdakiler dahil xmlns
edilecek şekilde değiştirilir:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
</ContentPage>
DrawingView'ı kullanma
<toolkit:DrawingView
Lines="{Binding MyLines}"
LineColor="Red"
LineWidth="5" />
C#
using CommunityToolkit.Maui.Views;
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
LineColor = Colors.Red,
LineWidth = 5
};
Aşağıdaki ekran görüntüsünde, Android'de elde edilen DrawingView gösterilmektedir:
Çok Satırlı kullanım
Varsayılan olarak DrawingView
yalnızca 1 satırı destekler. Etkinleştirmek MultiLine
için true olarak ayarlayın IsMultiLineModeEnabled
. False olduğundan emin ShouldClearOnFinish
olun.
XAML
<views:DrawingView
Lines="{Binding MyLines}"
IsMultiLineModeEnabled="true"
ShouldClearOnFinish="false" />
C#
using CommunityToolkit.Maui.Views;
var gestureImage = new Image();
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
IsMultiLineModeEnabled = true,
ShouldClearOnFinish = false,
};
Aşağıdaki ekran görüntüsünde, Android'de elde edilen DrawingView gösterilmektedir:
Çizim Çizgisi Tamamlandığında olayı işleme
DrawingView
gibi OnDrawingLineCompleted
olaylara abone olmayı sağlar. Buna karşılık gelen komut DrawingLineCompletedCommand
da kullanılabilir.
XAML
<views:DrawingView
Lines="{Binding MyLines}"
DrawingLineCompletedCommand="{Binding DrawingLineCompletedCommand}"
OnDrawingLineCompleted="OnDrawingLineCompletedEvent" />
C#
using CommunityToolkit.Maui.Views;
var gestureImage = new Image();
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
DrawingLineCompletedCommand = new Command<IDrawingLine>(async (line) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await line.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
})
};
drawingView.OnDrawingLineCompleted += async (s, e) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await e.LastDrawingLine.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
};
ScrollView içinde kullanma
bir iç ScrollView
kullanırken DrawingView
ile ScrollView
dokunma etkileşimi bazen iOS üzerinde kesilebilir. Bu durum, özelliği false
aşağıdaki örnekte gösterildiği ShouldDelayContentTouches
gibi iOS'ta olarak ayarlanarak önlenebilir:
ios:ScrollView.ShouldDelayContentTouches="false" öğesini DrawingView içeren ScrollView'a ekleyerek bu sorunu çözdüm:
<ContentPage
xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls">
<ScrollView ios:ScrollView.ShouldDelayContentTouches="false">
<DrawingView />
</ScrollView>
</ContentPage>
Daha fazla bilgi için bkz. ScrollView içerik dokunuşları.
Gelişmiş kullanım
Tüm avantajları elde etmek için, DrawingView
çizim çizgilerinin görüntü akışını alma yöntemlerini sağlar.
XAML
<toolkit:DrawingView
x:Name="DrawingViewControl"
Lines="{Binding MyLines}"
IsMultiLineModeEnabled="true"
ShouldClearOnFinish="true"
DrawingLineCompletedCommand="{Binding DrawingLineCompletedCommand}"
OnDrawingLineCompleted="OnDrawingLineCompletedEvent"
LineColor="Red"
LineWidth="5"
HorizontalOptions="Fill"
VerticalOptions="Fill">
<toolkit:DrawingView.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<GradientStop Color="Blue"
Offset="0"/>
<GradientStop Color="Yellow"
Offset="1"/>
</LinearGradientBrush>
</toolkit:DrawingView.Background>
</toolkit:DrawingView>
C#
using CommunityToolkit.Maui.Views;
var gestureImage = new Image();
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
IsMultiLineModeEnabled = true,
ShouldClearOnFinish = false,
DrawingLineCompletedCommand = new Command<IDrawingLine>(async (line) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await line.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
}),
LineColor = Colors.Red,
LineWidth = 5,
Background = Brush.Red
};
drawingView.OnDrawingLineCompleted += async (s, e) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await e.LastDrawingLine.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
};
// get stream from lines collection
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var lines = new List<IDrawingLine>();
var stream1 = await DrawingView.GetImageStream(
lines,
new Size(gestureImage.Width, gestureImage.Height),
Colors.Black.
cts.Token);
// get steam from the current DrawingView
var stream2 = await drawingView.GetImageStream(gestureImage.Width, gestureImage.Height, cts.Token);
Özellikler
Özellik | Türü | Açıklama |
---|---|---|
Hatlar | ObservableCollection<IDrawingLine> |
Bunun koleksiyonu IDrawingLine şu anda DrawingView |
IsMultiLineModeEnabled | bool |
Çok satırlı moda geçer. Doğru olduğunda, dokunma/tıklama satırlar arasında serbest bırakılırken üzerine DrawingView birden çok çizgi çizilebilir. Not: etkinleştirildiğinde ClearOnFinish , dokunma/tıklama serbest bırakıldıktan sonra çizgiler temizlenir. Ayrıca, DrawingLineCompletedCommand çizilen her çizgiden sonra tetiklenir. |
ShouldClearOnFinish | bool |
Dokunma/tıklama serbest bırakıldıktan sonra öğesinin temizlenip temizlenmediğini DrawingView ve bir çizgi çizilip çizmediğini gösterir. Not: etkinleştirildiğinde IsMultiLineModeEnabled , bu beklenmeyen davranışlara neden olabilir. |
DrawingLineStartedCommand | ICommand |
Üzerinde bir çizgi çizimi başlatıldığında bu komut çağrılır DrawingView . |
DrawingLineCancelledCommand | ICommand |
Üzerindeki bir çizginin DrawingView çizimi iptal olduğunda bu komut çağrılır. |
DrawingLineCompletedCommand | ICommand |
Üzerindeki bir çizginin çizimi tamamlandığında bu komut çağrılır DrawingView . . Bunun, dokunma veya tıklama kaldırıldıktan sonra tetiklendiğini unutmayın. Etkinleştirildiğinde MultiLineMode bu komut birden çok kez tetiklenir. |
PointDrawnCommand | ICommand |
Üzerindeki bir noktanın çizimi tamamlandığında bu komut çağrılır DrawingView . |
OnDrawingLineStarted | EventHandler<DrawingLineStartedEventArgs> |
DrawingView çizgi çizildiğinde olay oluşur. |
OnDrawingLineCancelled | EventHandler<EventArgs> |
DrawingView çizim çizgisi iptal edildiğinde olay oluşur. |
OnDrawingLineCompleted | EventHandler<DrawingLineCompletedEventArgs> |
DrawingView çizim çizgisi tamamlandığında olay oluşur. |
OnPointDrawn | EventHandler<PointDrawnEventArgs> |
DrawingView olay nokta çizildiğinde gerçekleşir. |
LineColor | Color |
üzerinde DrawingView bir çizgi çizmek için varsayılan olarak kullanılan renk. |
LineWidth | float |
üzerinde bir çizgi DrawingView çizmek için varsayılan olarak kullanılan genişlik. |
Çizim Çizgisi
, DrawingLine
noktaların listesini içerir ve her çizgi stilini ayrı ayrı yapılandırmaya olanak tanır.
Özellikler
Özellik | Türü | Açıklama | Default value |
---|---|---|---|
LineColor | Color |
üzerinde DrawingView çizgi çizmek için kullanılan renk. |
Colors.Black |
LineWidth | float |
üzerinde çizgi DrawingView çizmek için kullanılan genişlik. |
5 |
Noktalar | ObservableCollection<PointF> |
Bu koleksiyonu PointF satırı yapar. |
new() |
Ayrıntı düzeyi | int |
Bu satırın ayrıntı düzeyi. En düşük değer 5'tir. Değer ne kadar yüksekse, çizgi o kadar düzgün olursa program o kadar yavaş olur. | 5 |
ShouldSmoothPathWhenDrawn | bool |
Bu çizgi çizildiğinde düzeltilirse (diğer addan koruma) etkinleştirir veya devre dışı bırakır. | false |
Özel IDrawingLine
Varsayılanı DrawingLine
özel uygulamayla değiştirmek için 2 adım vardır:
- uygulayan
IDrawingLine
özel sınıf oluşturma:public class MyDrawingLine : IDrawingLine { public ObservableCollection<PointF> Points { get; } = new(); ... }
- uygulayan
IDrawingLineAdapter
özel sınıf oluşturun.public class MyDrawingLineAdapter : IDrawingLineAdapter { public IDrawingLine(MauiDrawingLine mauiDrawingLine) { return new MyDrawingLine { Points = mauiDrawingLine.Points, ... } } }
- içinde
IDrawingViewHandler
özelIDrawingLineAdapter
olarak ayarlayın:var myDrawingLineAdapter = new MyDrawingLineAdapter(); drawingViewHandler.SetDrawingLineAdapter(myDrawingLineAdapter);
DrawingLineStartedEventArgs
Son çizim noktasını içeren olay bağımsız değişkeni.
Özellikler
Özellik | Türü | Açıklama |
---|---|---|
Nokta | PointF |
Son çizim noktası. |
DrawingLineCompletedEventArgs
Son çizim çizgilerini içeren olay bağımsız değişkeni.
Özellikler
Özellik | Türü | Açıklama |
---|---|---|
LastDrawingLine | IDrawingLine |
Son çizim çizgisi. |
PointDrawnEventArgs
Son çizim noktasını içeren olay bağımsız değişkeni.
Özellikler
Özellik | Türü | Açıklama |
---|---|---|
Nokta | PointF |
Son çizim noktası. |
Yöntemler
Metot | Açıklama |
---|---|
GetImageStream | üzerinde çizilmiş DrawingView olan öğesinin Lines görüntüsünü içeren bir Stream alır. |
GetImageStream (statik) | Stream Parametre olarak sağlanan koleksiyonunun IDrawingLine bir görüntüsünü içeren bir alır. |
Örnekler
Bu özelliğin bir örneğini .NET MAUI Community Toolkit Örnek Uygulaması'nda çalışır durumda bulabilirsiniz.
API
üzerinde için DrawingView
kaynak kodunu .NET MAUI Community Toolkit GitHub deposunda bulabilirsiniz.
.NET MAUI Community Toolkit