【问题标题】:InkCanvas EraserInkCanvas 橡皮擦
【发布时间】:2011-03-30 05:37:03
【问题描述】:

我的画板是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选择橡皮擦,橡皮擦笔尖会出现矩形
  2. 按 + 号增加大小,您不会看到任何变化。为什么?
  3. 现在按 i 更改编辑模式,会出现墨迹提示。
  4. 再次按 e 可重新切换到橡皮擦。您会看到橡皮擦的形状发生了变化。

为什么按 + 号后不呢?

【问题讨论】:

    标签: wpf silverlight mvvm inkcanvas


    【解决方案1】:

    来自help:

    “如果更改 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;
    }
    

    【讨论】:

    • 但这不是它应该工作的方式,橡皮擦应该反映变化,尽管我们不切换编辑模式,因为它适用于墨水形状。 ink.EraserShape = new RectangleStylusShape(5, 5);应该工作,为什么不工作???
    • 您和我可能不同意,但它在 MSDN 中,因此它是一个已知且预期的功能。
    猜你喜欢
    • 2011-03-27
    • 2011-04-16
    • 2013-10-19
    • 2012-09-30
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多