Dela via


Samla bläck

Plattformen Windows Presentation Foundation samlar in digitalt bläck som en central del av dess funktionalitet. I det här avsnittet beskrivs insamlingsmetoder för bläck i Windows Presentation Foundation (WPF).

Förutsättningar

Om du vill använda följande exempel måste du först installera Visual Studio och Windows SDK. Du bör också förstå hur du skriver program för WPF. Mer information om hur du kommer igång med WPF finns i Genomgång: Mitt första WPF-skrivbordsprogram.

Använda InkCanvas-elementet

Elementet System.Windows.Controls.InkCanvas är det enklaste sättet att samla in bläck i WPF. Använd ett InkCanvas-element för att ta emot och visa bläckinmatning. Du matar ofta in bläck med hjälp av en penna, som interagerar med en digitaliserare för att skapa pennstreck. Dessutom kan en mus användas i stället för en penna. De skapade linjerna representeras som Stroke objekt, och de kan manipuleras både programmatiskt och med användarindata. Med InkCanvas kan användarna välja, ändra eller ta bort en befintlig Stroke.

Genom att använda XAML kan du konfigurera bläcksinsamling lika enkelt som att lägga till ett InkCanvas-element i trädet. I följande exempel läggs en InkCanvas till ett WPF-standardprojekt som skapats i Visual Studio:

<Grid>
  <InkCanvas/>
</Grid>

InkCanvas- element kan också innehålla underordnade element, vilket gör det möjligt att lägga till funktioner för pennanteckning i nästan alla typer av XAML-element. Om du till exempel vill lägga till ritfunktioner i ett textelement, ska du helt enkelt göra det till en underordnad komponent i en InkCanvas.

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

Det är lika enkelt att lägga till stöd för att markera en bild med pennanteckning:

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

Bläckinsamlingslägen

InkCanvas ger stöd för olika indatalägen via dess egenskap EditingMode.

Hantera bläck

InkCanvas har stöd för många pennanteckningsredigeringsåtgärder. InkCanvas har till exempel stöd för suddgummi på baksidan av pennan, och ingen ytterligare kod behövs för att lägga till denna funktionalitet i elementet.

Urval

Det är lika enkelt att ställa in markeringsläget som att ange egenskapen InkCanvasEditingMode till Välj.

Följande kod anger redigeringsläget baserat på värdet för en 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

Ritningsattribut

Använd egenskapen DrawingAttributes för att ändra utseendet på pennstreck. Till exempel anger Color medlem i DrawingAttributes färgen på den renderade Stroke.

I följande exempel ändras färgen på de markerade linjerna till röd:

// 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

Standardritningsattribut

Egenskapen DefaultDrawingAttributes ger åtkomst till egenskaper som höjd, bredd och färg för de linjer som ska skapas i en InkCanvas. När du har ändrat DefaultDrawingAttributes, återges alla framtida drag som anges i InkCanvas med de nya egenskapsvärdena.

Förutom att ändra DefaultDrawingAttributes i filen bakom koden kan du använda XAML-syntax för att ange DefaultDrawingAttributes egenskaper.

I nästa exempel visas hur du anger egenskapen Color. Om du vill använda den här koden skapar du ett nytt WPF-projekt med namnet "HelloInkCanvas" i Visual Studio. Ersätt koden i filen MainWindow.xaml med följande kod:

<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>

Lägg sedan till följande knapphändelsehanterare i koden bakom filen i klassen 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;
}

När du har kopierat den här koden trycker du på F5- i Visual Studio för att köra programmet i felsökningsprogrammet.

Observera hur StackPanel placerar knapparna ovanpå InkCanvas. Om du försöker rita med bläck över knapparna, så samlar InkCanvas in och återger bläcket bakom knapparna. Detta beror på att knapparna är syskon till InkCanvas i stället för barn. Knapparna är också högre i z-ordningen, så pennanteckningen återges bakom dem.

Se även