InkCanvas

40

В WPF также имеется элемент InkCanvas, который подобен Canvas в одних отношениях и совершенно отличается в других. Подобно Canvas, элемент InkCanvas определяет четыре присоединенных свойства, которые можно применить к дочерним элементам для координатного позиционирования (Top, Left, Bottom и Right). Однако лежащий в его основе механизм существенно отличается. Фактически InkCanvas не наследуется от Canvas, и даже не наследуется от базового класса Panel. Вместо этого он наследуется непосредственно от FrameworkElement.

Главное предназначение InkCanvas заключается в обеспечении перьевого ввода. Перо (stylus) — это подобное карандашу устройство ввода, используемое в планшетных ПК. Однако InkCanvas работает с мышью точно так же, как и с пером. Поэтому пользователь может рисовать линии или выбирать и манипулировать элементами в InkCanvas с применением мыши.

InkCanvas в действительности содержит две коллекции дочернего содержимого. Уже знакомая коллекция Children содержит произвольные элементы — как и Canvas. Каждый элемент может быть позиционирован на основе свойств Top, Left, Bottom и Right. Коллекция Strokes содержит объекты System.Windows.Ink.Stroke, представляющие графический ввод, который рисует пользователь в InkCanvas. Каждая нарисованная линия или кривая становится отдельным объектом Stroke. Благодаря этим двум коллекциям, InkCanvas можно использовать для того, чтобы позволить пользователю аннотировать содержимое (хранящееся в коллекции Children) пометками (хранящимися в коллекции Strokes). Например:

<InkCanvas EditingMode="Ink">
   <Image Source="auto.jpg" InkCanvas.Top="10" InkCanvas.Left="10"></Image>
</InkCanvas>
InkCanvas

Пометки нарисованы пользователем во время выполнения. InkCanvas может применяться несколькими существенно отличающимися способами, в зависимости от значения, которое устанавливается для свойства EditingMode. Возможные варианты этого значения перечислены ниже:

Ink

InkCanvas позволяет пользователю рисовать аннотации. Это режим по умолчанию. Когда пользователь рисует мышью или пером, появляются штрихи

GestureOnly

InkCanvas не позволяет пользователю рисовать аннотации, но привлекает внимание к некоторым предопределенным жестам (gesture), таким как перемещение пера в одном направлении или подчеркивание содержимого. Полный список жестов определен в перечислении System.Windows.Ink.ApplicationGesture

InkAndGesture

InkCanvas позволяет пользователю рисовать штриховые аннотации и также распознает предопределенные жесты

EraseByStroke

InkCanvas удаляет штрих при щелчке. Если у пользователя есть перо, он может переключиться в этот режим, используя его обратный конец. (Определить текущий режим можно, проверив значение доступного только для чтения свойства ActiveEditingMode, а для изменения режима, используемого обратным концом пера, необходимо модифицировать свойство EditingModeInverted.)

EraseByPoint

InkCanvas удаляет часть штриха (точку штриха) при щелчке на соответствующей его части

Select

InkCanvas позволяет пользователю выбирать элементы, хранящиеся в коллекции Children. Чтобы выбрать элемент, пользователь должен щелкнуть на нем или обвести "лассо" выбора вокруг него. Как только элемент выбран, его можно перемещать, изменять размер или удалять

None

InkCanvas игнорирует ввод с помощью мыши или пера

InkCanvas инициирует события при изменении режима редактирования (ActiveEditingModeChanged), обнаружении жеста в режимах GestureOnly или InkAndGesture (Gesture), рисовании штриха (StrokeCollected), стирании штриха (StrokeErasing и StrokeErased), а также при выборе элемента или изменении его в режиме Select (SelectionChanging, SelectionChanged, SelectionMoving, SelectionMoved, SelectionResizing и SelectlonResized). События, оканчивающиеся на ing, представляют действие, которое начинается, но может быть отменено установкой свойства Cancel объекта EventArgs.

В режиме Select элемент InkCanvas предоставляет довольно удобную поверхность проектирования для перетаскивания содержимого и различных манипуляций им. Ниже показан элемент управления Button в InkCanvas, когда он был выбран и затем увеличен:

Режим Select элемента InkCanvas
Масштабирование кнопки
Лучший чат для C# программистов