InkCanvas Eraser - PullRequest
       13

InkCanvas Eraser

0 голосов
/ 30 марта 2011

У меня есть блокнот как InkCanvas; Я хочу изменить размер ластика, поэтому я написал:

Private Sub Sketchpad_KeyDown(sender As System.Object, e As System.Windows.Input.KeyEventArgs) Handles Sketchpad.KeyDown

If e.Key = Key.OemMinus Then

' Decrease size of Eraser to 5*5 

Sketchpad.EraserShape = New RectangleStylusShape(5, 5)

End If

If e.Key = Key.OemPlus Then

' Increase size of Eraser to 50*50 

Sketchpad.EraserShape = New RectangleStylusShape(50, 50)

End If

If e.Key = Key.I Then
' Change editing mode to Ink
Sketchpad.EditingMode = InkCanvasEditingMode.Ink

End If

If e.Key = Key.E Then
' Change editing mode to Eraser
Sketchpad.EditingMode = InkCanvasEditingMode.EraseByPoint

End If

End Sub

Попробуйте это:

  1. Выберите ластик, нажав e, появится стилус Eraser. Прямоугольный
  2. Нажмите + знак, чтобы увеличить размер, вы не увидите никаких изменений. Почему?
  3. Теперь вы нажимаете i, чтобы изменить режим редактирования, появится подсказка чернил.
  4. Нажмите e еще раз, чтобы переключиться на Eraser. Вы увидите, что форма ластика была изменена.

Почему не после нажатия знака +?

1 Ответ

2 голосов
/ 19 апреля 2011

Из справки :

"При изменении EraserShape курсор, отображаемый на InkCanvas, не обновляется до следующего изменения EditingMode."

Я протестировал следующий код, и он отлично работает:

if (e.Key == Key.OemMinus)
{
    ink.EraserShape = new RectangleStylusShape(5, 5);
    var editMode = ink.EditingMode;
    ink.EditingMode = InkCanvasEditingMode.None;
    ink.EditingMode = editMode;
}
if (e.Key == Key.OemPlus)
{
    ink.EraserShape = new RectangleStylusShape(50, 50);
    var editMode = ink.EditingMode;
    ink.EditingMode = InkCanvasEditingMode.None;
    ink.EditingMode = editMode;
}
...