筆墨入門
更新:2007 年 11 月
將數位筆墨加入應用程式要比以往更加簡單。筆墨的演進發展對於 COM 和 Windows Forms 程式設計的方法,是達成與 WPF 完全整合的必要關鍵。您不一定要安裝個別的 SDK 或執行階段程式庫。
必要條件
您必須先安裝 Microsoft Visual Studio 2005 和 Windows SDK,才能使用下列範例。也應該瞭解如何撰寫 WPF 的應用程式。如需開始使用 WPF 的詳細資訊,請參閱 Windows Presentation Foundation 使用者入門。
快速入門
本節會協助您撰寫收集筆墨的簡單 WPF 應用程式。
如果您尚未安裝 Microsoft Visual Studio 2005 和 Windows Software Development Kit (SDK),請立即進行安裝。WPF 應用程式通常必須經過編譯,您才可以進行檢視,即使應用程式包含整個可延伸標記語言 (XAML) 亦然。但是,Windows Software Development Kit (SDK) 包含應用程式 XamlPad,XamlPad 是專為加入實作以 XAML 為基礎之 UI 的處理速度而設計的。您可以使用該應用程式,來檢視和修補本文件前幾個範例。從 XAML 建立已編譯應用程式的程序涵蓋在本文件稍後的部分。
若要啟動 XAMLPad,按一下 [開始] 功能表,依序指向 [所有程式]、[Microsoft Winndows SDK] 和 [工具],然後按一下 [XAMLPad]。在呈現窗格中,XAMLPad 會呈現在程式碼窗格中寫入的 XAML 程式碼。您可以編輯 XAML 程式碼,所做變更會立即顯示在呈現窗格中。
取得筆墨
若要啟動您第一個支援筆墨的 WPF 應用程式:
開啟 Microsoft Visual Studio 2005
建立新的 [Windows Application (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>
使用動畫
讓我們將漸層筆刷的色彩變成動畫,增添更多樂趣。將下列 XAML 加入至結束 </InkCanvas> 標籤之後,結束 </Page> 標籤之前。
<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 並開啟程式碼後置檔案,如果您使用的是 Visual Basic,則請開啟 Window1.xaml.cs 或 Window1.xaml.vb。加入下列事件處理常式程式碼:
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 功能。以下是將 "Hello Ink World" 用於完全不使用 XAML 的 WPF 應用情形。將下列程式碼貼到 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();
}
}