墨迹入门

将数字墨迹集成到应用程序要比以往更容易。 墨迹已从 COM 和 Windows 窗体编程方法的必然结果,发展到实现与 WPF 的完全集成。 您无需安装单独的 SDK 或运行库。

先决条件

若要使用下面的示例,首先必须安装 Microsoft Visual Studio 2005 和 Windows SDK。 还应了解如何编写 WPF 应用程序。 有关 WPF 入门的更多信息,请参见 演练:开始使用 WPF

快速入门

本节帮助您编写一个简单的 WPF 应用程序以收集墨迹。

如果您尚未安装 Microsoft Visual Studio 2005 和 Windows Software Development Kit (SDK),请先安装。 通常,WPF 应用程序必须先编译才能查看,即使应用程序完全由Extensible Application Markup Language (XAML) 构成也应如此。 但是,Windows Software Development Kit (SDK) 包括一个专为加快基于 XAML 的 UI 的实现过程而设计的应用程序 XamlPad。 您可以使用该应用程序来查看和修补本文档中的前几个示例。 本文档后面将介绍如何从 XAML 创建已编译应用程序。

若要启动 XAMLPad,请单击**“开始”菜单,依次指向“所有程序”“Microsoft Winndows SDK”“工具”,然后单击“XAMLPad”**。 在呈现窗格中,XAMLPad 会呈现在代码窗格中编写的 XAML 代码。 您可以编辑 XAML 代码,更改会立即显示在呈现窗格中。

如何获取墨迹

若要启动支持墨迹的第一个 WPF 应用程序,请执行以下操作:

  1. 打开 Microsoft Visual Studio 2005。

  2. 创建一个新的**“Windows 应用程序 (WPF)”**。

  3. 在 <Grid> 标记之间键入 <InkCanvas/>。

  4. 按**“F5”**在调试器中启动应用程序。

  5. 使用触笔或鼠标,在窗口中写下 hello world。

您仅用 12 次击键就编写了与“hello world”应用程序等效的墨迹!

增强您的应用程序

下面来使用 WPF 的某些功能。 用以下标记替换开始标记 <Window> 和结束标记 </Window> 之间的所有内容,以在墨迹图面上取得渐变画笔背景。

<Page>
  <InkCanvas Name="myInkCanvas">
    <InkCanvas.Background>
      <LinearGradientBrush>
        <GradientStop Color="Yellow" Offset="0.0" />
        <GradientStop Color="Blue" Offset="0.5" />
        <GradientStop Color="Green" Offset="1.0" />
      </LinearGradientBrush>
    </InkCanvas.Background>
  </InkCanvas>


...


</Page>

使用动画

为了提高趣味性,下面我们对渐变画笔的颜色进行动画处理。 在结束标记 </InkCanvas> 之后,结束标记 </Page> 之前添加以下 XAML。

<Page.Triggers>
  <EventTrigger RoutedEvent="Page.Loaded">
    <EventTrigger.Actions>
      <BeginStoryboard>
        <Storyboard RepeatBehavior="Forever" AutoReverse="True">
          <ColorAnimation  Storyboard.TargetName="myInkCanvas"
          Storyboard.TargetProperty=
            "(InkCanvas.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)"
          From="Yellow" To="Blue" Duration="0:0:5"/>
          <ColorAnimation Storyboard.TargetName="myInkCanvas"
          Storyboard.TargetProperty=
            "(InkCanvas.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)"
          From="Blue" To="Red" Duration="0:0:5"/>
          <ColorAnimation Storyboard.TargetName="myInkCanvas"
          Storyboard.TargetProperty=
            "(InkCanvas.Background).(LinearGradientBrush.GradientStops)[2].(GradientStop.Color)"
          From="Green" To="Blue" Duration="0:0:5"/>
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger.Actions>
  </EventTrigger>
</Page.Triggers>

在 XAML 后添加一些代码

虽然 XAML 使设计用户界面变得非常简单,但任何实际的应用程序都需要添加代码来处理事件。 以下是一个简单的示例,用于在用户右击鼠标时放大墨迹:

在 XAML 中设置 MouseRightButtonUp 处理程序:

<InkCanvas Name="myInkCanvas" MouseRightButtonUp="RightMouseUpHandler">

在 Visual Studio 的解决方案资源管理器中,展开 Windows1.xaml 并打开代码隐藏文件 Window1.xaml.cs 或 Window1.xaml.vb(如果使用 Visual Basic)。 添加以下事件处理程序代码:

Private Sub RightMouseUpHandler(ByVal sender As Object, _
                                ByVal e As System.Windows.Input.MouseButtonEventArgs)

    Dim m As New Matrix()
    m.Scale(1.1, 1.1)
    CType(sender, InkCanvas).Strokes.Transform(m, True)

End Sub 'RightMouseUpHandler
private void RightMouseUpHandler(object sender, 
                                 System.Windows.Input.MouseButtonEventArgs e)
{
    Matrix m = new Matrix();
    m.Scale(1.1d, 1.1d);
    ((InkCanvas)sender).Strokes.Transform(m, true);
}

现在,运行应用程序。 添加一些墨迹,然后右击鼠标或执行与触笔等效的按压操作。

使用过程代码替代 XAML

可以从过程代码访问所有 WPF 功能。 以下是 WPF 的“Hello Ink World”应用程序,其中未使用任何 XAML。 将以下代码粘贴到 Visual Studio 中空的控制台应用程序。 添加对 PresentationCore、PresentationFramework 和 WindowsBase 程序集的引用,然后按**“F5”**生成应用程序:

Imports System
Imports System.Windows
Imports System.Windows.Controls


Class Program
    Inherits Application
    Private win As Window
    Private ic As InkCanvas


    Protected Overrides Sub OnStartup(ByVal args As StartupEventArgs)
        MyBase.OnStartup(args)
        win = New Window()
        ic = New InkCanvas()
        win.Content = ic
        win.Show()

    End Sub 'OnStartup

End Class 'Program

Module Module1

    Sub Main()
        Dim prog As New Program()
        prog.Run()

    End Sub

End Module
using System;
using System.Windows;
using System.Windows.Controls;
class Program : Application
{
    Window win;
    InkCanvas ic;

    protected override void OnStartup(StartupEventArgs args)
    {
        base.OnStartup(args);
        win = new Window();
        ic = new InkCanvas();
        win.Content = ic;
        win.Show();
    }

    [STAThread]
    static void Main(string[] args)
    {
        new Program().Run();
    }
}

请参见

概念

收集墨迹

手写识别

存储墨迹

其他资源

数字墨迹