Nasıl yapılır: Mürekkep Verisine Özel Veri Ekleme
Mürekkep seri hale getirilmiş biçim (ıSF) olarak kaydedildiğinde, mürekkebe kaydedilecek özel veriler ekleyebilirsiniz. Özel verileri, veya içine kaydedebilirsiniz DrawingAttributesStrokeCollectionStroke . Özel verileri üç nesneye kaydedebilme, verileri kaydetmek için en iyi yere karar vermenize olanak tanır. Tüm üç sınıf özel verileri depolamak ve bunlara erişmek için benzer yöntemler kullanır.
Yalnızca aşağıdaki türler özel veri olarak kaydedilebilir:
Boolean[]
Byte[]
Char[]
DateTime[]
Decimal[]
Double[]
Int16[]
Int32[]
Int64[]
Single[]
UInt16[]
UInt32[]
UInt64[]
Örnek
Aşağıdaki örnek, bir kaynağından özel verilerin nasıl ekleneceğini ve alınacağını gösterir StrokeCollection .
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.");
}
}
Aşağıdaki örnek, ve iki düğme görüntüleyen bir uygulama oluşturur InkCanvas . Düğme, iki switchAuthor kalemin iki farklı yazar tarafından kullanılmasını sağlar. Düğme, changePenColors yazara göre her bir konturun rengini değiştirir InkCanvas . Uygulama iki nesneyi tanımlar DrawingAttributes ve her birine hangi yazarın çizdiğini belirten özel bir özellik ekler Stroke . Kullanıcı tıkladığı zaman, changePenColors uygulama konturun görünümünü özel özelliğin değerine göre değiştirir.
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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>
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;
}
}
}
}
}