HOW TO:將自訂資料加入至筆墨資料
更新:2007 年 11 月
您可以將自訂資料新增至將儲存成為筆墨序列化格式 (ISF) 的筆墨。您可以將自訂資料儲存至 DrawingAttributes、StrokeCollection 或 Stroke。將自訂資料儲存在三個物件上,可以讓您決定儲存資料的最佳位置。這三種類別都使用類似的方法以儲存和存取自訂資料。
只有下面的型別可以儲存成自訂資料:
Boolean[]
Byte[]
Char[]
DateTime[]
Decimal[]
Double[]
Int16[]
Int32[]
Int64[]
Single[]
UInt16[]
UInt32[]
UInt64[]
範例
下列範例說明如何從 StrokeCollection 新增和擷取自訂資料。
Private timestamp As New Guid("12345678-9012-3456-7890-123456789012")
' Add a timestamp to the StrokeCollection.
Private Sub AddTimestamp()
inkCanvas1.Strokes.AddPropertyData(timestamp, DateTime.Now)
End Sub 'AddTimestamp
' Get the timestamp of the StrokeCollection.
Private Sub GetTimestamp()
If inkCanvas1.Strokes.ContainsPropertyData(timestamp) Then
Dim [date] As Object = inkCanvas1.Strokes.GetPropertyData(timestamp)
If TypeOf [date] Is DateTime Then
MessageBox.Show("This StrokeCollection's timestamp is " + CType([date], DateTime).ToString())
End If
Else
MessageBox.Show("The StrokeCollection does not have a timestamp.")
End If
End Sub 'GetTimestamp
Guid timestamp = new Guid("12345678-9012-3456-7890-123456789012");
// Add a timestamp to the StrokeCollection.
private void AddTimestamp()
{
inkCanvas1.Strokes.AddPropertyData(timestamp, DateTime.Now);
}
// Get the timestamp of the StrokeCollection.
private void GetTimestamp()
{
if (inkCanvas1.Strokes.ContainsPropertyData(timestamp))
{
object date = inkCanvas1.Strokes.GetPropertyData(timestamp);
if (date is DateTime)
{
MessageBox.Show("This StrokeCollection's timestamp is " +
((DateTime)date).ToString());
}
}
else
{
MessageBox.Show(
"The StrokeCollection does not have a timestamp.");
}
}
下列範例會建立一個應用程式,會顯示一個 InkCanvas 和兩個按鈕。按鈕 switchAuthor 允許兩位不同作者使用兩支畫筆。按鈕 changePenColors 會根據作者的設定,變更 InkCanvas 上每一筆劃的色彩。應用程式會定義兩個 DrawingAttributes 物件,並各自新增一個自訂屬性,以標示哪一個 Stroke 是由哪一位作者所寫的。當使用者按一下 changePenColors,應用程式會根據自訂屬性的值變更筆劃的外觀。
<Window x:Class="Window1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="Adding Custom Data to Ink" Height="500" Width="700"
>
<DockPanel Name="root">
<StackPanel Background="DarkSlateBlue">
<Button Name="switchAuthor" Click="switchAuthor_click" >
Switch to student's pen
</Button>
<Button Name="changePenColors" Click="changeColor_click" >
Change the color of the pen ink
</Button>
</StackPanel>
<InkCanvas Name="inkCanvas1">
</InkCanvas>
</DockPanel>
</Window>
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Media
Imports System.Windows.Media.Imaging
Imports System.Windows.Shapes
Imports System.Windows.Ink
'/ <summary>
'/ Interaction logic for Window1.xaml
'/ </summary>
Partial Class Window1
Inherits Window '
Private authorGuid As New Guid("12345678-9012-3456-7890-123456789012")
Private teachersDA As New DrawingAttributes()
Private studentsDA As New DrawingAttributes()
Private teacher As String = "teacher"
Private student As String = "student"
Private useStudentPen As Boolean = False
Public Sub New()
InitializeComponent()
teachersDA.Color = Colors.Red
teachersDA.Width = 5
teachersDA.Height = 5
teachersDA.AddPropertyData(authorGuid, teacher)
studentsDA.Color = Colors.Blue
studentsDA.Width = 5
studentsDA.Height = 5
studentsDA.AddPropertyData(authorGuid, student)
inkCanvas1.DefaultDrawingAttributes = teachersDA
End Sub 'New
' Switch between using the 'pen' DrawingAttributes and the
' 'highlighter' DrawingAttributes.
Private Sub switchAuthor_click(ByVal sender As [Object], ByVal e As RoutedEventArgs)
useStudentPen = Not useStudentPen
If useStudentPen Then
switchAuthor.Content = "Use teacher's pen"
inkCanvas1.DefaultDrawingAttributes = studentsDA
Else
switchAuthor.Content = "Use student's pen"
inkCanvas1.DefaultDrawingAttributes = teachersDA
End If
End Sub 'switchAuthor_click
' Change the color of the ink that on the InkCanvas that used the pen.
Private Sub changeColor_click(ByVal sender As [Object], ByVal e As RoutedEventArgs)
Dim s As Stroke
For Each s In inkCanvas1.Strokes
If s.DrawingAttributes.ContainsPropertyData(authorGuid) Then
Dim data As Object = s.DrawingAttributes.GetPropertyData(authorGuid)
If TypeOf data Is String AndAlso CStr(data) = teacher Then
s.DrawingAttributes.Color = Colors.Black
End If
If TypeOf data Is String AndAlso CStr(data) = student Then
s.DrawingAttributes.Color = Colors.Green
End If
End If
Next s
End Sub 'changeColor_click
End Class 'Window1
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Ink;
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
Guid authorGuid = new Guid("12345678-9012-3456-7890-123456789012");
DrawingAttributes teachersDA = new DrawingAttributes();
DrawingAttributes studentsDA = new DrawingAttributes();
string teacher = "teacher";
string student = "student";
bool useStudentPen = false;
public Window1()
{
InitializeComponent();
teachersDA.Color = Colors.Red;
teachersDA.Width = 5;
teachersDA.Height = 5;
teachersDA.AddPropertyData(authorGuid, teacher);
studentsDA.Color = Colors.Blue;
studentsDA.Width = 5;
studentsDA.Height = 5;
studentsDA.AddPropertyData(authorGuid, student);
inkCanvas1.DefaultDrawingAttributes = teachersDA;
}
// Switch between using the 'pen' DrawingAttributes and the
// 'highlighter' DrawingAttributes.
void switchAuthor_click(Object sender, RoutedEventArgs e)
{
useStudentPen = !useStudentPen;
if (useStudentPen)
{
switchAuthor.Content = "Use teacher's pen";
inkCanvas1.DefaultDrawingAttributes = studentsDA;
}
else
{
switchAuthor.Content = "Use student's pen";
inkCanvas1.DefaultDrawingAttributes = teachersDA;
}
}
// Change the color of the ink that on the InkCanvas that used the pen.
void changeColor_click(Object sender, RoutedEventArgs e)
{
foreach (Stroke s in inkCanvas1.Strokes)
{
if (s.DrawingAttributes.ContainsPropertyData(authorGuid))
{
object data = s.DrawingAttributes.GetPropertyData(authorGuid);
if ((data is string) && ((string)data == teacher))
{
s.DrawingAttributes.Color = Colors.Black;
}
if ((data is string) && ((string)data == student))
{
s.DrawingAttributes.Color = Colors.Green;
}
}
}
}
}