WPF, InkCanvas
У 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
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, коли він був вибраний і потім збільшено: