使用手写笔在InkCanvas控件上着墨时,墨水笔划不会显示50%的时间

时间:2011-05-03 13:07:17

标签: .net wpf

我想要完成的事情

我希望允许用户在控件(标签,下拉列表,文本框等)上方进行墨迹处理,将墨迹笔划转换为文本,然后将文本输入控件。当使用鼠标/触控笔单击控件时,将InkCanvas控件置于前景,将捕获墨迹。当提升鼠标/手写笔时,InkCanvas将返回到背景。

问题

使用鼠标时,这总是按预期工作。使用触控笔时,墨水笔划有时不会显示在InkCanvas上,直到触控笔被抬起。它可以在大约50%的时间内正常工作。

项目

我创建了一个简单的WPF项目,其中包含一个带有InkCanvas控件和标签的窗口。单击标签后,InkCanvas将到达前台并开始接受墨迹输入。 InkCanvas在鼠标移动时返回背景。

XAML

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="409" Width="824" WindowStartupLocation="CenterScreen">
<Grid>
    <InkCanvas IsHitTestVisible="False" Panel.ZIndex="0" Background="Aqua" Name="InkContainer"  />
    <Label Content="INK ON ME" Height="60" HorizontalAlignment="Left" Margin="424,146,0,0" Name="Label1" VerticalAlignment="Top" Width="254" FontSize="36" Foreground="White" FontWeight="Bold" />
</Grid>

背后的代码

Class MainWindow

Private Sub InkContainer_PreviewMouseUp(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) Handles InkContainer.PreviewMouseUp

    Canvas.SetZIndex(InkContainer, -1)
    InkContainer.IsHitTestVisible = False

End Sub

Private Sub Label1_PreviewMouseDown(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) Handles Label1.PreviewMouseDown

    InkContainer.Strokes.Clear()
    Canvas.SetZIndex(InkContainer, 100)
    InkContainer.IsHitTestVisible = True
    InkContainer.CaptureMouse()

End Sub

End Class

如果您有任何疑问和/或需要其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

修复是将手写笔向下标记为已处理,因此它不会冒泡并触发其他手写笔/鼠标事件。以下是更新后的代码:

Class MainWindow 

Private Sub Label1_PreviewMouseDown(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) Handles Label1.PreviewMouseDown

    InkContainer.Strokes.Clear()
    Canvas.SetZIndex(InkContainer, 100)
    InkContainer.IsHitTestVisible = True
    InkContainer.CaptureStylus()

End Sub

Private Sub Label1_PreviewStylusDown(sender As System.Object, e As System.Windows.Input.StylusDownEventArgs) Handles Label1.PreviewStylusDown

    InkContainer.Strokes.Clear()
    Canvas.SetZIndex(InkContainer, 100)
    InkContainer.IsHitTestVisible = True
    InkContainer.CaptureStylus()

    e.Handled = True

End Sub

Private Sub InkContainer_PreviewMouseUp(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) Handles InkContainer.PreviewMouseUp

    Canvas.SetZIndex(InkContainer, -1)
    InkContainer.IsHitTestVisible = False

End Sub

End Class