我想要完成的事情
我希望允许用户在控件(标签,下拉列表,文本框等)上方进行墨迹处理,将墨迹笔划转换为文本,然后将文本输入控件。当使用鼠标/触控笔单击控件时,将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
如果您有任何疑问和/或需要其他信息,请与我们联系。
答案 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