墨迹入门
将数字墨迹集成到应用程序要比以往更容易。 墨迹已从 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 应用程序,请执行以下操作:
打开 Microsoft Visual Studio 2005。
创建一个新的**“Windows 应用程序 (WPF)”**。
在 <Grid> 标记之间键入 <InkCanvas/>。
按**“F5”**在调试器中启动应用程序。
使用触笔或鼠标,在窗口中写下 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();
}
}