Aracılığıyla paylaş


Windows uygulamalarında kalem etkileşimleri ve Windows Ink

Surface Kalemi'nin hero görüntüsü.
Surface Kalemi ( Microsoft Store'da satın alınabilir).

Genel Bakış

Windows uygulamanızı kalem girişi için iyileştirerek hem standart işaretçi cihaz işlevselliğini hem de kullanıcılarınız için en iyi Windows Ink deneyimini sağlayın.

Uyarı

Bu konu, Windows Ink platformuna odaklanır. Genel işaretçi girişi işleme (fare, dokunma ve dokunmatik yüzeye benzer) için bkz. İşaretçi girişini işleme.

Windows uygulamanızda mürekkep kullanma

Daha ilgi çekici kurumsal uygulamalar oluşturmak için Windows Kalemi ve Mürekkep kullanma

Windows Ink platformu, kalem cihazıyla birlikte dijital el yazısı notlar, çizimler ve ek açıklamalar oluşturmak için doğal bir yol sağlar. Platform, mürekkep verileri olarak dijital hale getirici girişini yakalamayı, mürekkep verileri oluşturmayı, mürekkep verilerini yönetmeyi, mürekkep verilerini çıkış cihazında mürekkep vuruşu olarak işlemeyi ve el yazısı tanıma aracılığıyla mürekkepleri metne dönüştürmeyi destekler.

Kullanıcı yazarken veya çizerken kalemin temel konumunu ve hareketini yakalamanın yanı sıra, uygulamanız bir vuruş boyunca kullanılan çeşitli basınç miktarlarını da izleyebilir ve toplayabilir. Kalem ucu şekli, boyutu ve döndürme, mürekkep rengi ve amacı (düz mürekkep, silme, vurgulama ve seçme) ayarlarıyla birlikte bu bilgiler, kalem, kalem veya fırçayla kağıt üzerinde yazmaya veya çizmeye çok benzeyen kullanıcı deneyimleri sağlamanıza olanak tanır.

Uyarı

Uygulamanız, dokunmatik basamaklandırıcılar ve fare cihazları da dahil olmak üzere diğer işaretçi tabanlı cihazlardan mürekkep girişini de destekleyebilir. 

Mürekkep platformu çok esnektir. Gereksinimlerinize bağlı olarak çeşitli işlev düzeylerini destekleyecek şekilde tasarlanmıştır.

Windows Ink UX yönergeleri için bkz. Mürekkep oluşturma denetimleri.

Windows Ink platformunun bileşenleri

Bileşen Description
InkCanvas Kalemden gelen tüm girişleri varsayılan olarak mürekkep vuruşu veya silme işlemi olarak alan ve görüntüleyen bir XAML UI platformu denetimi.
InkCanvas'ı kullanma hakkında daha fazla bilgi için bkz. Windows Ink vuruşlarını metin olarak tanıma ve Windows Ink vuruş verilerini depolama ve alma.
InkPresenter Bir InkCanvas denetimiyle birlikte örneklenen bir arka plan kod nesnesi (bu denetim InkCanvas.InkPresenter özelliği aracılığıyla erişilir). Bu nesne , InkCanvas tarafından kullanıma sunulan tüm varsayılan mürekkep oluşturma işlevlerinin yanı sıra ek özelleştirme ve kişiselleştirme için kapsamlı bir API kümesi sağlar.
InkPresenter'ı kullanma hakkında daha fazla bilgi için bkz. Windows Ink vuruşlarını metin olarak tanıma ve Windows Ink vuruş verilerini depolama ve alma.
InkToolbar İlişkili bir InkCanvas'ta mürekkeple ilgili özellikleri etkinleştiren özelleştirilebilir ve genişletilebilir düğme koleksiyonunu içeren bir XAML UI platform denetimi.
InkToolbar'ı kullanma hakkında daha fazla bilgi için bkz. Windows uygulaması mürekkep oluşturma uygulamasına InkToolbar ekleme.
IInkD2DRenderer Mürekkep vuruşlarının varsayılan InkCanvas denetimi yerine Evrensel Windows uygulamasının belirlenmiş Direct2D cihaz bağlamında işlenmesini sağlar. Bu, mürekkep oluşturma deneyiminin tam özelleştirmesini sağlar.
Daha fazla bilgi için bkz. Karmaşık mürekkep örneği.

InkCanvas ile temel mürekkep kullanımı

Temel mürekkep oluşturma işlevselliği eklemek için uygulamanızdaki uygun sayfaya bir InkCanvas UWP platform denetimi yerleştirmeniz yeter.

Varsayılan olarak , InkCanvas yalnızca kalemden mürekkep girişini destekler. Giriş, ya renk ve kalınlık için varsayılan ayarlarla (2 piksel kalınlığında siyah tükenmez kalem) mürekkep çizgisi olarak işlenir ya da vuruş silgisi olarak işlem görür (giriş, silgi ucundan geldiğinde veya kalem ucundaki silme düğmesiyle değiştirildiğinde).

Uyarı

Bir silgi ucu veya düğmesi yoksa, InkCanvas kalem ucundan gelen girişleri silme işlemi olarak işlenecek şekilde yapılandırılabilir.

Bu örnekte bir InkCanvas bir arka plan görüntüsünün üzerine gelir.

Uyarı

InkCanvas, StackPanel veya Grid denetimleri gibi alt öğelerini otomatik olarak boyutlandıran bir öğenin alt öğesi olmadığı sürece sıfır olan varsayılan Yükseklik ve Genişlik özelliklerine sahiptir.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel x:Name="HeaderPanel" Orientation="Horizontal" Grid.Row="0">
        <TextBlock x:Name="Header"
                   Text="Basic ink sample"
                   Style="{ThemeResource HeaderTextBlockStyle}"
                   Margin="10,0,0,0" />            
    </StackPanel>
    <Grid Grid.Row="1">
        <Image Source="Assets\StoreLogo.png" />
        <InkCanvas x:Name="inkCanvas" />
    </Grid>
</Grid>

Bu görüntü serisi, kalem girişinin bu InkCanvas denetimi tarafından nasıl işlendiğini gösterir.

Arka plan resmi olan boş InkCanvas'ın ekran görüntüsü. Mürekkep vuruşlu InkCanvas'ın ekran görüntüsü. Tek vuruşlu InkCanvas'ın ekran görüntüsü silindi.
Arka plan görüntüsü ile boş InkCanvas. Mürekkep darbeleri içeren InkCanvas. Tek vuruşlu InkCanvas silindi (silme işleminin bir kısımda değil, tüm vuruşta nasıl çalıştığına dikkat edin).

InkCanvas denetimi tarafından desteklenen mürekkep oluşturma işlevi, InkPresenter adlı arka plan kod nesnesi tarafından sağlanır.

Temel mürekkep oluşturma için InkPresenter ile ilgilenmeniz gerekmez. Ancak, InkCanvas'ta mürekkep oluşturma davranışını özelleştirmek ve yapılandırmak için, buna karşılık gelen InkPresenter nesnesine erişmeniz gerekir.

InkPresenter ile temel özelleştirme

Bir InkPresenter nesnesi, her InkCanvas denetimiyle oluşturulur.

Uyarı

InkPresenter doğrudan başlatılamaz. Bunun yerine, InkCanvas'ın InkPresenter özelliği aracılığıyla erişilir

InkPresenter, karşılık gelen InkCanvas denetiminin tüm varsayılan mürekkep oluşturma davranışlarını sağlamanın yanı sıra, ek vuruş özelleştirmesi ve kalem girişinin daha ayrıntılı yönetimi (standart ve değiştirilmiş) için kapsamlı bir API kümesi sağlar. Buna vuruş özellikleri, desteklenen giriş cihazı türleri ve girişin nesne tarafından işlenip işlenmediği veya işleme için uygulamaya geçirilip geçirilmediği dahildir.

Uyarı

Standart mürekkep girişi (kalemin ucu veya silgi ucu/düğmesinden) kalem gövde düğmesi, sağ fare düğmesi veya benzeri bir mekanizma gibi ikincil donanım desteği ile değiştirilmez.

Mürekkep varsayılan olarak yalnızca kalem girişi için desteklenir. Burada InkPresenter'ı hem kalemden hem de fareden gelen giriş verilerini mürekkep vuruşları olarak yorumacak şekilde yapılandıracağız. InkCanvas'a vuruşları işlemek için kullanılan bazı ilk mürekkep vuruşu özniteliklerini de ayarladık.

Fare ve dokunmatik mürekkep oluşturmayı etkinleştirmek için InkPresenter'ınInputDeviceTypes özelliğini istediğiniz CoreInputDeviceTypes değerlerinin birleşimine ayarlayın.

public MainPage()
{
    this.InitializeComponent();

    // Set supported inking device types.
    inkCanvas.InkPresenter.InputDeviceTypes =
        Windows.UI.Core.CoreInputDeviceTypes.Mouse |
        Windows.UI.Core.CoreInputDeviceTypes.Pen;

    // Set initial ink stroke attributes.
    InkDrawingAttributes drawingAttributes = new InkDrawingAttributes();
    drawingAttributes.Color = Windows.UI.Colors.Black;
    drawingAttributes.IgnorePressure = false;
    drawingAttributes.FitToCurve = true;
    inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(drawingAttributes);
}

Mürekkep vuruşu öznitelikleri, kullanıcı tercihlerini veya uygulama gereksinimlerini karşılamak için dinamik olarak ayarlanabilir.

Burada, kullanıcının mürekkep renkleri listesinden seçim yapmasına izin veririz.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel x:Name="HeaderPanel" Orientation="Horizontal" Grid.Row="0">
        <TextBlock x:Name="Header"
                   Text="Basic ink customization sample"
                   VerticalAlignment="Center"
                   Style="{ThemeResource HeaderTextBlockStyle}"
                   Margin="10,0,0,0" />
        <TextBlock Text="Color:"
                   Style="{StaticResource SubheaderTextBlockStyle}"
                   VerticalAlignment="Center"
                   Margin="50,0,10,0"/>
        <ComboBox x:Name="PenColor"
                  VerticalAlignment="Center"
                  SelectedIndex="0"
                  SelectionChanged="OnPenColorChanged">
            <ComboBoxItem Content="Black"/>
            <ComboBoxItem Content="Red"/>
        </ComboBox>
    </StackPanel>
    <Grid Grid.Row="1">
        <Image Source="Assets\StoreLogo.png" />
        <InkCanvas x:Name="inkCanvas" />
    </Grid>
</Grid>

Ardından seçili renk değişikliklerini işleyip mürekkep vuruşu özniteliklerini uygun şekilde güncelleştiriyoruz.

// Update ink stroke color for new strokes.
private void OnPenColorChanged(object sender, SelectionChangedEventArgs e)
{
    if (inkCanvas != null)
    {
        InkDrawingAttributes drawingAttributes =
            inkCanvas.InkPresenter.CopyDefaultDrawingAttributes();

        string value = ((ComboBoxItem)PenColor.SelectedItem).Content.ToString();

        switch (value)
        {
            case "Black":
                drawingAttributes.Color = Windows.UI.Colors.Black;
                break;
            case "Red":
                drawingAttributes.Color = Windows.UI.Colors.Red;
                break;
            default:
                drawingAttributes.Color = Windows.UI.Colors.Black;
                break;
        };

        inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(drawingAttributes);
    }
}

Bu görüntülerde kalem girişinin InkPresenter tarafından nasıl işlendiği ve özelleştirileceği gösterilmektedir.

Varsayılan siyah mürekkep vuruşlarıyla InkCanvas'ın gösterildiği ekran görüntüsü.

Varsayılan siyah mürekkep vuruşlarıyla InkCanvas .

Kullanıcı tarafından seçilen kırmızı mürekkep vuruşlarıyla InkCanvas'ın ekran görüntüsü.

Kullanıcı tarafından seçili kırmızı mürekkep vuruşlarıyla InkCanvas.

Uygulamanızın mürekkepleme ve silmenin ötesinde, örneğin vuruş seçimi gibi işlevler sağlaması için, işlenmeden uygulamanız tarafından ele alınacak şekilde InkPresenter aracılığıyla geçmesi gereken belirli girişleri tanıması gerekir.

Gelişmiş işleme için doğrudan veri girişi

Varsayılan olarak, InkPresenter kalem varil düğmesi, sağ fare düğmesi veya benzeri donanımlar gibi ikincil bir donanım özelliği tarafından değiştirilen girişler de dahil olmak üzere tüm girişleri mürekkep çizimi veya silme çizimi olarak işler. Ancak kullanıcılar genellikle bu ikincil olanaklarla ilave işlevler veya değiştirilmiş davranışlar bekler.

Bazı durumlarda, ikincil işlevleri olmayan kalemler (genellikle kalem ucu ile ilişkili olmayan işlevler), diğer giriş cihaz türleri veya uygulamanızın kullanıcı arabirimindeki bir kullanıcı seçimine bağlı olarak bazı değiştirilmiş davranış türlerini açmanız veya sağlamanız gerekebilir.

Bunu desteklemek için , InkPresenter belirli girişleri işlenmemiş olarak bırakacak şekilde yapılandırılabilir. Bu işlenmemiş giriş daha sonra işlenmek üzere uygulamanıza geçirilir.

Örnek - Vuruş seçimini uygulamak için işlenmemiş veriyi kullanma

Windows Ink platformu, vuruş seçimi gibi değiştirilmiş giriş gerektiren eylemler için yerleşik destek sağlamaz. Bunun gibi özellikleri desteklemek için uygulamalarınızda özel bir çözüm sağlamanız gerekir.

Aşağıdaki kod örneği (tüm kod MainPage.xaml ve MainPage.xaml.cs dosyalarındadır) giriş kalem varil düğmesi (veya sağ fare düğmesi) ile değiştirildiğinde vuruş seçimini etkinleştirme adımlarıdır.

  1. İlk olarak MainPage.xaml dosyasında kullanıcı arabirimini ayarlayacağız.

    Burada seçim vuruşunu çizmek için InkCanvas'ın altına bir tuval ekliyoruz. Seçim vuruşunu çizmek için ayrı bir katman kullanılması, InkCanvas'e ve içeriğine dokunmaz.

    Altında seçim tuvali bulunan boş InkCanvas'ın ekran görüntüsü.

      <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"/>
          <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <StackPanel x:Name="HeaderPanel" Orientation="Horizontal" Grid.Row="0">
          <TextBlock x:Name="Header"
            Text="Advanced ink customization sample"
            VerticalAlignment="Center"
            Style="{ThemeResource HeaderTextBlockStyle}"
            Margin="10,0,0,0" />
        </StackPanel>
        <Grid Grid.Row="1">
          <!-- Canvas for displaying selection UI. -->
          <Canvas x:Name="selectionCanvas"/>
          <!-- Inking area -->
          <InkCanvas x:Name="inkCanvas"/>
        </Grid>
      </Grid>
    
  2. MainPage.xaml.cs'da, seçim kullanıcı arabiriminin bileşenlerine yönelik referansları tutmak için birkaç global değişken bildiririz. Özellikle seçim kement vuruşu ve seçili vuruşları vurgulayan sınırlayıcı dikdörtgen.

      // Stroke selection tool.
      private Polyline lasso;
      // Stroke selection area.
      private Rect boundingRect;
    
  3. Ardından InkPresenter'ı hem kalemden hem de fareden gelen giriş verilerini mürekkep vuruşları olarak yorumacak şekilde yapılandıracak ve vuruşları inkCanvas'a işlemek için kullanılan bazı ilk mürekkep vuruşu özniteliklerini ayarlayacağız.

    En önemlisi, değiştirilen girişlerin uygulama tarafından işlenmesi gerektiğini belirtmek için InkPresenter'ınInputProcessingConfiguration özelliğini kullanırız. Değiştirilen giriş, InputProcessingConfiguration.RightDragAction değeri InkInputRightDragAction.LeaveUnprocessed olarak atanarak belirtilir. Bu değer ayarlandığında, InkPresenter , işlemek için bir işaretçi olayları kümesi olan InkUnprocessedInput sınıfına geçer.

    InkPresenter tarafından geçirilen işlenmemiş PointerPressed, PointerMoved ve PointerReleased olayları için dinleyiciler atarız. Tüm seçim fonksiyonları bu olayların işleyicilerinde uygulanır.

    Son olarak, InkPresenter'ınStrokeStarted ve StrokesErased olayları için dinleyiciler atarız. Yeni bir vuruş başlatılırsa veya mevcut bir vuruş silinirse seçim kullanıcı arabirimini temizlemek için bu olaylar için işleyicileri kullanırız.

    İnk özelleştirme örneği uygulamasının, varsayılan siyah mürekkep vuruşlarına sahip mürekkep tuvalini gösteren ekran görüntüsü.

      public MainPage()
      {
        this.InitializeComponent();
    
        // Set supported inking device types.
        inkCanvas.InkPresenter.InputDeviceTypes =
          Windows.UI.Core.CoreInputDeviceTypes.Mouse |
          Windows.UI.Core.CoreInputDeviceTypes.Pen;
    
        // Set initial ink stroke attributes.
        InkDrawingAttributes drawingAttributes = new InkDrawingAttributes();
        drawingAttributes.Color = Windows.UI.Colors.Black;
        drawingAttributes.IgnorePressure = false;
        drawingAttributes.FitToCurve = true;
        inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(drawingAttributes);
    
        // By default, the InkPresenter processes input modified by
        // a secondary affordance (pen barrel button, right mouse
        // button, or similar) as ink.
        // To pass through modified input to the app for custom processing
        // on the app UI thread instead of the background ink thread, set
        // InputProcessingConfiguration.RightDragAction to LeaveUnprocessed.
        inkCanvas.InkPresenter.InputProcessingConfiguration.RightDragAction =
            InkInputRightDragAction.LeaveUnprocessed;
    
        // Listen for unprocessed pointer events from modified input.
        // The input is used to provide selection functionality.
        inkCanvas.InkPresenter.UnprocessedInput.PointerPressed +=
            UnprocessedInput_PointerPressed;
        inkCanvas.InkPresenter.UnprocessedInput.PointerMoved +=
            UnprocessedInput_PointerMoved;
        inkCanvas.InkPresenter.UnprocessedInput.PointerReleased +=
            UnprocessedInput_PointerReleased;
    
        // Listen for new ink or erase strokes to clean up selection UI.
        inkCanvas.InkPresenter.StrokeInput.StrokeStarted +=
            StrokeInput_StrokeStarted;
        inkCanvas.InkPresenter.StrokesErased +=
            InkPresenter_StrokesErased;
      }
    
  4. Ardından, InkPresenter tarafından geçirilen işlenmemiş PointerPressed, PointerMoved ve PointerReleased olayları için işleyiciler tanımlarız.

    Kement vuruşu ve sınırlayıcı dikdörtgen de dahil olmak üzere tüm seçim işlevleri bu işleyicilerde uygulanır.

    Seçim kementinin ekran görüntüsü.

      // Handle unprocessed pointer events from modified input.
      // The input is used to provide selection functionality.
      // Selection UI is drawn on a canvas under the InkCanvas.
      private void UnprocessedInput_PointerPressed(
        InkUnprocessedInput sender, PointerEventArgs args)
      {
        // Initialize a selection lasso.
        lasso = new Polyline()
        {
            Stroke = new SolidColorBrush(Windows.UI.Colors.Blue),
            StrokeThickness = 1,
            StrokeDashArray = new DoubleCollection() { 5, 2 },
            };
    
            lasso.Points.Add(args.CurrentPoint.RawPosition);
    
            selectionCanvas.Children.Add(lasso);
        }
    
        private void UnprocessedInput_PointerMoved(
          InkUnprocessedInput sender, PointerEventArgs args)
        {
          // Add a point to the lasso Polyline object.
          lasso.Points.Add(args.CurrentPoint.RawPosition);
        }
    
        private void UnprocessedInput_PointerReleased(
          InkUnprocessedInput sender, PointerEventArgs args)
        {
          // Add the final point to the Polyline object and
          // select strokes within the lasso area.
          // Draw a bounding box on the selection canvas
          // around the selected ink strokes.
          lasso.Points.Add(args.CurrentPoint.RawPosition);
    
          boundingRect =
            inkCanvas.InkPresenter.StrokeContainer.SelectWithPolyLine(
              lasso.Points);
    
          DrawBoundingRect();
        }
    
  5. PointerReleased olay işleyicisini sonlandırmak için, tüm içeriğin (kement çizgisi) seçim katmanını temizleriz, ardından kement alanı tarafından kaplanmış mürekkep vuruşlarının etrafına tek bir sınırlayıcı dikdörtgen çizeriz.

    Seçim sınırlama düzeltmesinin ekran görüntüsü.

      // Draw a bounding rectangle, on the selection canvas, encompassing
      // all ink strokes within the lasso area.
      private void DrawBoundingRect()
      {
        // Clear all existing content from the selection canvas.
        selectionCanvas.Children.Clear();
    
        // Draw a bounding rectangle only if there are ink strokes
        // within the lasso area.
        if (!((boundingRect.Width == 0) ||
          (boundingRect.Height == 0) ||
          boundingRect.IsEmpty))
          {
            var rectangle = new Rectangle()
            {
              Stroke = new SolidColorBrush(Windows.UI.Colors.Blue),
                StrokeThickness = 1,
                StrokeDashArray = new DoubleCollection() { 5, 2 },
                Width = boundingRect.Width,
                Height = boundingRect.Height
            };
    
            Canvas.SetLeft(rectangle, boundingRect.X);
            Canvas.SetTop(rectangle, boundingRect.Y);
    
            selectionCanvas.Children.Add(rectangle);
          }
        }
    
  6. Son olarak StrokeStarted ve StrokesErased InkPresenter olayları için işleyiciler tanımladık.

    İkisi de yeni bir vuruş algılandığında geçerli seçimi temizlemek için aynı temizleme fonksiyonunu çağırır.

      // Handle new ink or erase strokes to clean up selection UI.
      private void StrokeInput_StrokeStarted(
        InkStrokeInput sender, Windows.UI.Core.PointerEventArgs args)
      {
        ClearSelection();
      }
    
      private void InkPresenter_StrokesErased(
        InkPresenter sender, InkStrokesErasedEventArgs args)
      {
        ClearSelection();
      }
    
  7. Yeni bir vuruş başlatıldığında veya mevcut bir vuruş silindiğinde, seçim tuvalinden tüm seçim arayüzünü kaldıran işlev aşağıdadır.

      // Clean up selection UI.
      private void ClearSelection()
      {
        var strokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes();
        foreach (var stroke in strokes)
        {
          stroke.Selected = false;
        }
        ClearDrawnBoundingRect();
       }
    
      private void ClearDrawnBoundingRect()
      {
        if (selectionCanvas.Children.Any())
        {
          selectionCanvas.Children.Clear();
          boundingRect = Rect.Empty;
        }
      }
    

Özel mürekkep render'ı

Mürekkep girişi, varsayılan olarak düşük gecikmeli bir arka plan iş parçacığında işlenir ve çizilirken, yani "ıslak" olarak, işlem sırasında görüntülenir. Vuruş tamamlandığında (kalem veya parmak kaldırıldığında veya fare düğmesi serbest bırakıldığında), vuruş kullanıcı arabirimi iş parçacığında işlenir ve InkCanvas katmanına "kuru" işlenir (uygulama içeriğinin üstünde ve ıslak milenk'in yerini alır).

Bu varsayılan davranışı geçersiz kılabilir ve ıslak mürekkep vuruşlarını "özel kurutma" yoluyla mürekkep deneyimini tamamen kontrol edebilirsiniz. Varsayılan davranış genellikle çoğu uygulama için yeterli olsa da, özel kurutmanın gerekebileceği birkaç durum vardır, bunlar şunlardır:

  • Büyük veya karmaşık mürekkep vuruşları koleksiyonlarının daha verimli yönetimi
  • Büyük mürekkep tuvallerinde daha verimli kaydırma ve yakınlaştırma desteği
  • Z düzenini korurken mürekkep ve şekiller veya metin gibi diğer nesneler arasında geçiş yapma
  • Mürekkebi senkronize bir şekilde DirectX şekline kurutmak ve dönüştürmek (örneğin, düz bir çizgi veya şeklin, ayrı bir InkCanvas katmanı yerine uygulama içeriğine rasterleştirilip bütünleştirilmesi).

Özel kurutma, mürekkep girişini yönetmek ve bunu varsayılan InkCanvas denetimi yerine Evrensel Windows uygulamanızın Direct2D cihaz bağlamında işlemek için bir IInkD2DRenderer nesnesi gerektirir.

ActivateCustomDrying çağrısı yaparak (InkCanvas yüklenmeden önce), bir uygulama mürekkep vuruşunun SurfaceImageSource veya VirtualSurfaceImageSource'a kuru olarak nasıl işlendiğini özelleştirmek için bir InkSynchronizer nesnesi oluşturur.

Hem SurfaceImageSource hem de VirtualSurfaceImageSource , uygulamanızın içeriğine çekmesi ve oluşturması için bir DirectX paylaşılan yüzeyi sağlar ancak VSIS, yüksek performanslı kaydırma ve yakınlaştırma için ekrandan daha büyük bir sanal yüzey sağlar. Bu yüzeylerde yapılan görsel güncelleştirmeler XAML UI iş parçacığıyla eşitlendiğinden, mürekkep her iki yüzeye de işlendiğinde, ıslak mürekkep InkCanvas'tan eşzamanlı olarak kaldırılabilir.

Bir SwapChainPanel'e özel kuru mürekkep uygulaması da yapabilirsiniz, ancak UI iş parçacığı ile senkronizasyon garanti edilmez ve mürekkep SwapChainPanel'inize işlendiğinde ve InkCanvas'tan kaldırıldığında zaman arasında bir gecikme olabilir.

Bu işlevin tam örneği için bkz. Karmaşık mürekkep örneği.

Uyarı

Özel kurutma ve InkToolbar
Uygulamanız özel bir kurutma uygulamasıyla InkPresenter'ın varsayılan mürekkep işleme davranışını geçersiz kılarsa, işlenen mürekkep vuruşları artık InkToolbar'da kullanılamaz ve InkToolbar'ın yerleşik silme komutları beklendiği gibi çalışmaz. Silme işlevselliği sağlamak için tüm işaretçi olaylarını işlemeniz, her vuruşta isabet testi gerçekleştirmeniz ve yerleşik "Tüm mürekkebleri sil" komutunu geçersiz kılmanız gerekir.

Konu Description
Mürekkep vuruşlarını tanıma Mürekkep vuruşlarını, el yazısı tanıma kullanarak metne, veya özel tanıma sistemi kullanarak şekillere dönüştürün.
Mürekkep vuruşlarını depola ve geri al Mürekkep vuruşu verilerini, gömülü Mürekkep Serileştirilmiş Biçim (ISF) meta verilerini kullanarak Grafik Değişim Biçimi (GIF) dosyasında depolayın.
Windows mürekkep oluşturma uygulamasına InkToolbar ekleme Windows uygulaması mürekkep oluşturma uygulamasına varsayılan bir InkToolbar ekleyin, InkToolbar'a özel kalem düğmesi ekleyin ve özel kalem düğmesini özel kalem tanımına bağlayın.

API’ler

Samples

Arşiv Örnekleri