Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформа Windows Presentation Foundation (WPF) собирает цифровые чернила как часть основного функционала. В этом разделе рассматриваются методы сбора чернил в WPF.
Предпосылки
Чтобы использовать следующие примеры, необходимо сначала установить Visual Studio и пакет SDK для Windows. Вы также должны понять, как писать приложения для WPF. Дополнительные сведения о том, как начать работать с WPF, см. в разделе Пошаговое руководство: Мое первое настольное приложение WPF.
Использование элемента InkCanvas
Элемент System.Windows.Controls.InkCanvas предоставляет самый простой способ сбора рукописного ввода в WPF. Используйте элемент InkCanvas для получения и отображения входных данных рукописного ввода. Обычно вы вводите чернила с помощью стилуса, который взаимодействует с дигитайзером для создания чернильных штрихов. Кроме того, мышь может использоваться вместо пера. Созданные росчерки представлены как объекты Stroke, и ими можно управлять как программно, так и с помощью пользовательского ввода. InkCanvas позволяет пользователям выбирать, изменять или удалять Stroke, который уже существует.
С помощью XAML можно настроить сбор рукописных данных так легко, как добавить элемент InkCanvas в структуру дерева. В следующем примере InkCanvas добавляется в проект WPF по умолчанию, созданный в Visual Studio:
<Grid>
<InkCanvas/>
</Grid>
Элемент InkCanvas также может содержать дочерние элементы, что позволяет добавлять возможности заметок рукописного ввода практически к любому типу элемента XAML. Например, чтобы добавить возможности рукописного ввода в текстовый элемент, просто сделайте его дочерним элементом InkCanvas:
<InkCanvas>
<TextBlock>Show text here.</TextBlock>
</InkCanvas>
Добавить поддержку разметки изображения с помощью чернил так же просто:
<InkCanvas>
<Image Source="myPicture.jpg"/>
</InkCanvas>
Режимы сбора чернил
InkCanvas обеспечивает поддержку различных режимов ввода с помощью своего свойства EditingMode.
Манипулирование чернилами
InkCanvas обеспечивает поддержку многих операций с цифровыми чернилами. Например, InkCanvas поддерживает удаление задней части пера, а дополнительный код не требуется для добавления функциональных возможностей в элемент.
Отбор
Настройка режима выбора так же проста, как установка свойства InkCanvasEditingMode в значение Select.
Следующий код задает режим редактирования на основе значения 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 для изменения внешнего вида штрихов. Например, элемент Color из DrawingAttributes задает цвет отрисованного Stroke.
В следующем примере цвет выбранных штрихов изменяется на красный:
// 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 предоставляет доступ к таким свойствам, как высота, ширина и цвет штрихов, создаваемых в InkCanvas. После изменения DefaultDrawingAttributesвсе будущие штрихи, введенные в InkCanvas, отображаются с новыми значениями свойств.
Помимо изменения DefaultDrawingAttributes в файле программной части, можно использовать синтаксис XAML для указания свойств DefaultDrawingAttributes.
В следующем примере показано, как задать свойство Color. Чтобы использовать этот код, создайте проект WPF с именем HelloInkCanvas в Visual Studio. Замените код в файле MainWindow.xaml следующим кодом:
<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>
Затем добавьте следующие обработчики событий кнопки в файл программной части в классе 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;
}
После копирования этого кода нажмите клавишу F5 в Visual Studio, чтобы запустить программу в отладчике.
Обратите внимание, как StackPanel размещает кнопки наверху InkCanvas. Если вы попытаетесь писать поверх кнопок, InkCanvas собирает и отображает рукопись за кнопками. Это связано с тем, что кнопки являются братьями и сестрами InkCanvas в отличие от дочерних элементов. Кроме того, кнопки находятся выше в «z-порядке», поэтому чернила отображаются за ними.
См. также
.NET Desktop feedback