Udostępnij za pośrednictwem


Zbieranie pisma oddyskowego

Platforma Windows Presentation Foundation zbiera cyfrowe atramenty jako podstawową część jej funkcji. W tym temacie omówiono metody zbierania pisma oddyskowego w programie Windows Presentation Foundation (WPF).

Wymagania wstępne

Aby użyć poniższych przykładów, należy najpierw zainstalować program Visual Studio i zestaw Windows SDK. Należy również zrozumieć, jak pisać aplikacje dla WPF. Aby uzyskać więcej informacji na temat rozpoczynania pracy z WPF, zobacz Przewodnik: Moja pierwsza aplikacja klasyczna WPF.

Używanie elementu InkCanvas

Element System.Windows.Controls.InkCanvas zapewnia najprostszy sposób zbierania pisma odkowego w WPF. Użyj elementu do odbierania InkCanvas i wyświetlania danych wejściowych pisma odkowego. Często wprowadzasz pisma odręcznego za pomocą rysika, który współdziała z cyfryzatorem w celu tworzenia pociągnięć pisma odręcznego. Ponadto mysz może być używana zamiast rysika. Utworzone pociągnięcia są reprezentowane jako obiekty i mogą być manipulowane zarówno programowo, jak Stroke i przez dane wejściowe użytkownika. Funkcja InkCanvas umożliwia użytkownikom wybieranie, modyfikowanie lub usuwanie istniejącego Strokeelementu .

Korzystając z języka XAML, można skonfigurować kolekcję pisma oddyskowego tak łatwo, jak dodanie elementu InkCanvas do drzewa. Poniższy przykład dodaje element InkCanvas do domyślnego projektu WPF utworzonego w programie Visual Studio:

<Grid>
  <InkCanvas/>
</Grid>

Element InkCanvas może również zawierać elementy podrzędne, dzięki czemu można dodać możliwości adnotacji pisma oddyskowego do niemal dowolnego typu elementu XAML. Aby na przykład dodać możliwości pisma odręcznego do elementu tekstowego, po prostu utwórz element podrzędny elementu InkCanvas:

<InkCanvas>
  <TextBlock>Show text here.</TextBlock>
</InkCanvas>

Dodanie obsługi oznaczania obrazu za pomocą pisma oddyskowego jest równie proste:

<InkCanvas>
  <Image Source="myPicture.jpg"/>
</InkCanvas>

Tryby inkCollection

Zapewnia InkCanvas obsługę różnych trybów wejściowych za pośrednictwem jego EditingMode właściwości.

Manipulowanie atramentem

Zapewnia InkCanvas obsługę wielu operacji edytowania pisma od ręcznego. Na przykład InkCanvas obsługuje wymazywanie z tyłu pióra, a do dodania funkcji do elementu nie jest wymagany żaden dodatkowy kod.

Wybór

Ustawianie trybu wyboru jest tak proste, jak ustawienie InkCanvasEditingMode właściwości na Wybierz.

Poniższy kod ustawia tryb edycji na podstawie wartości elementu CheckBox:

// Set the selection mode based on a checkbox
if ((bool)cbSelectionMode.IsChecked)
{
    theInkCanvas.EditingMode = InkCanvasEditingMode.Select;
}
else
{
    theInkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
' Set the selection mode based on a checkbox
If CBool(cbSelectionMode.IsChecked) Then
    theInkCanvas.EditingMode = InkCanvasEditingMode.Select
Else
    theInkCanvas.EditingMode = InkCanvasEditingMode.Ink
End If

DrawingAttributes

Użyj właściwości , DrawingAttributes aby zmienić wygląd pociągnięć atramentu. Na przykład Color element członkowski DrawingAttributes ustawia kolor renderowanego Strokeelementu .

Poniższy przykład zmienia kolor zaznaczonych pociągnięć na czerwony:

// Get the selected strokes from the InkCanvas
StrokeCollection selection = theInkCanvas.GetSelectedStrokes();

// Check to see if any strokes are actually selected
if (selection.Count > 0)
{
    // Change the color of each stroke in the collection to red
    foreach (System.Windows.Ink.Stroke stroke in selection)
    {
        stroke.DrawingAttributes.Color = System.Windows.Media.Colors.Red;
    }
}
' Get the selected strokes from the InkCanvas
Dim selection As StrokeCollection = theInkCanvas.GetSelectedStrokes()

' Check to see if any strokes are actually selected
If selection.Count > 0 Then
    ' Change the color of each stroke in the collection to red
    Dim stroke As System.Windows.Ink.Stroke
    For Each stroke In  selection
        stroke.DrawingAttributes.Color = System.Windows.Media.Colors.Red
    Next stroke
End If

DefaultDrawingAttributes

Właściwość DefaultDrawingAttributes zapewnia dostęp do właściwości, takich jak wysokość, szerokość i kolor pociągnięć do utworzenia w obiekcie InkCanvas. Po zmianie DefaultDrawingAttributeswłaściwości wszystkie przyszłe pociągnięcia wprowadzone w obiekcie InkCanvas są renderowane przy użyciu nowych wartości właściwości.

Oprócz modyfikowania DefaultDrawingAttributes pliku w pliku za pomocą kodu można użyć składni XAML do określania DefaultDrawingAttributes właściwości.

W następnym przykładzie pokazano, jak ustawić Color właściwość . Aby użyć tego kodu, utwórz nowy projekt WPF o nazwie "HelloInkCanvas" w programie Visual Studio. Zastąp kod w pliku MainWindow.xaml następującym kodem:

<Window x:Class="HelloInkCanvas.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Ink="clr-namespace:System.Windows.Ink;assembly=PresentationCore"
    Title="Hello, InkCanvas!" Height="300" Width="300"
    >
  <Grid>
    <InkCanvas Name="inkCanvas1" Background="Ivory">
      <InkCanvas.DefaultDrawingAttributes>
        <Ink:DrawingAttributes xmlns:ink="system-windows-ink" Color="Red" Width="5" />
      </InkCanvas.DefaultDrawingAttributes>
    </InkCanvas>

    <!-- This stack panel of buttons is a sibling to InkCanvas (not a child) but overlapping it, 
         higher in z-order, so that ink is collected and rendered behind -->
    <StackPanel Name="buttonBar" VerticalAlignment="Top" Height="26" Orientation="Horizontal" Margin="5">
      <Button Click="Ink">Ink</Button>
      <Button Click="Highlight">Highlight</Button>
      <Button Click="EraseStroke">EraseStroke</Button>
      <Button Click="Select">Select</Button>
    </StackPanel>
  </Grid>
</Window>

Następnie dodaj następujące programy obsługi zdarzeń przycisku do kodu za plikiem w klasie MainWindow:

// Set the EditingMode to ink input.
private void Ink(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;

    // Set the DefaultDrawingAttributes for a red pen.
    inkCanvas1.DefaultDrawingAttributes.Color = Colors.Red;
    inkCanvas1.DefaultDrawingAttributes.IsHighlighter = false;
    inkCanvas1.DefaultDrawingAttributes.Height = 2;
}

// Set the EditingMode to highlighter input.
private void Highlight(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;

    // Set the DefaultDrawingAttributes for a highlighter pen.
    inkCanvas1.DefaultDrawingAttributes.Color = Colors.Yellow;
    inkCanvas1.DefaultDrawingAttributes.IsHighlighter = true;
    inkCanvas1.DefaultDrawingAttributes.Height = 25;
}

// Set the EditingMode to erase by stroke.
private void EraseStroke(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.EraseByStroke;
}

// Set the EditingMode to selection.
private void Select(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.Select;
}

Po skopiowaniu tego kodu naciśnij klawisz F5 w programie Visual Studio, aby uruchomić program w debugerze.

Zwróć uwagę, że przyciski są StackPanel umieszczane w górnej części obiektu InkCanvas. Jeśli spróbujesz odrękować w górnej części przycisków, InkCanvas narzędzie zbiera i renderuje atrament za przyciskami. Wynika to z faktu, że przyciski są rodzeństwem InkCanvas dzieci. Ponadto przyciski są wyższe w kolejności z, więc atrament jest renderowany za nimi.

Zobacz też