مشاركة عبر


تجميع الحبر

يقوم النظام الأساسى Windows Presentation Foundation بتجميع الحبر الرقمي كجزء أساسي من الوظائف الخاصة به. يناقش هذا الموضوع أساليب تجميع الحبر في Windows Presentation Foundation (WPF).

المتطلبات الأساسية

لاستخدام الأمثلة التالية ، يجب عليك أولاً تثبيت Microsoft Visual Studio 2005 و Windows SDK. يجب أيضاً فهم كيفية كتابة تطبيقات لـ WPF. لمزيد من المعلومات حول كيفية البدء فى WPFراجعالشروع في استخدام WPF.

استخدام عنصر InkCanvas

يوفر العنصر InkCanvas أسهل طريقة لتجميع الحبر في WPF. العنصر InkCanvas الكائن InkOverlay من الإصدار 1.7 لعدة تطوير البرامج الخاصة بالكمبيوتر اللوحيوالإصدارات السابقة.

قم باستخدام العنصر InkCanvas لتلقي وعرض إدخال الحبر. إدخال الحبر يكون عادة من خلال إبرة والتى تتفاعل مع جهاز الالتقاط الرقمي لإنتاج ضغطات الحبر. بالإضافة إلى ذلك، يمكنك استخدام ماوس بدلاً من قلم. يتم تمثيل الضغطات التى تم إنشاؤها ككائنات Stroke، فإنه يمكن معالجتها برمجياً وبواسطة إدخال المستخدم. يمكن InkCanvas المستخدمين من تحديد أو تعديل أو حذف Strokeموجودة.

باستخدام XAML يمكنك إعداد مجموعة الحبر بنفس سهولة إضافة عنصر InkCanvas الى الشجرة الخاصة بك. المثال التالي يضيف InkCanvas الى مشروع افتراضي WPF تم إنشائه Microsoft Visual Studio 2005.

<Grid>
  <InkCanvas/>
</Grid>

يمكن أن يحتوى العنصر InkCanvas على عناصر تابعة مما يجعل من الممكن اضافة قدرات توضيحات الحبر إلى أي نوع من عناصر XAML. على سبيل المثال، لاضافة قدرات التحبير الى عنصر نصي, ببساطة قم بجعله تابع لـ InkCanvas.

<InkCanvas>
  <TextBlock>Show text here.</TextBlock>
</InkCanvas>

إضافة دعم لتمييز صورة بالحبر بنفس السهولة.

<InkCanvas>
  <Image Source="myPicture.jpg"/>
</InkCanvas>

أوضاع InkCollection

يوفر InkCanvas الدعم لأنواع متعددة من أوضاع الإدخال من خلال الخاصية EditingModeالخاصة به.

معالجة الحبر

يوفر InkCanvas الدعم للعديد من عمليات تحرير الحبر. على سبيل المثال، يدعم InkCanvas محو يخلفية القلم بدون أى تعليمات برمجية اضافية لإضافة هذه الوظيفة إلى العنصر.

التحديد

يتم ضبط وضع التحديد يكون بسيطاً مثل إعداد الخاصية InkCanvasEditingMode إلى Select. تعين التعليمات البرمجية التالية وضع التحرير استناداً إلى قيمة CheckBox:

' Set the selection mode based on a checkbox
If CBool(cbSelectionMode.IsChecked) Then
    theInkCanvas.EditingMode = InkCanvasEditingMode.Select
Else
    theInkCanvas.EditingMode = InkCanvasEditingMode.Ink
End If
// Set the selection mode based on a checkbox
if ((bool)cbSelectionMode.IsChecked)
{
    theInkCanvas.EditingMode = InkCanvasEditingMode.Select;
}
else
{
    theInkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}

DrawingAttributes

قم باستخدام الخاصية DrawingAttributes لتغيير مظهر ضغطات الحبر. على سبيل المثال، يعين العضو Color من DrawingAttributes لون الـ Stroke الذى تم تقديمه. المثال التالي يقوم بتغيير لون الضغطات المحددة الى اللون الأحمر.

' Get the selected strokes from the InkCanvas
Dim selection As StrokeCollection = theInkCanvas.GetSelectedStrokes()

' Check to see if any strokes are actually selected
If selection.Count > 0 Then
    ' Change the color of each stroke in the collection to red
    Dim stroke As System.Windows.Ink.Stroke
    For Each stroke In  selection
        stroke.DrawingAttributes.Color = System.Windows.Media.Colors.Red
    Next stroke
End If
// Get the selected strokes from the InkCanvas
StrokeCollection selection = theInkCanvas.GetSelectedStrokes();

// Check to see if any strokes are actually selected
if (selection.Count > 0)
{
    // Change the color of each stroke in the collection to red
    foreach (System.Windows.Ink.Stroke stroke in selection)
    {
        stroke.DrawingAttributes.Color = System.Windows.Media.Colors.Red;
    }
}

DefaultDrawingAttributes

توفر الخاصية DefaultDrawingAttributes الوصول إلى خصائص مثل الارتفاع والعرض ولون الضغطات المراد إنشائها في InkCanvas. بمجرد تغيير DefaultDrawingAttributes ، كل الضغطات المستقبلية التي يتم إدخالها الى InkCanvas تُستخرج كقيم جديدة للخاصية.

بالإضافة إلى تعديل DefaultDrawingAttributes في ملف التعليمات البرمجية الخلفية، يمكنك استخدام بناء الجملة XAML من أجل تحديد خصائص DefaultDrawingAttributes. تعمل التعليمات البرمجية XAML التالية على توضيح كيفية تعيين الخاصية Color. إلى استخدم تعليمات برمجية، قم بإنشاء جديد WPFمشروع يسمى "HelloInkCanvas" في ‏‫‏‫Visual Studio 2005. استبدال الرمز في ملف Window1.xaml مع تعليمات برمجية التالية.

<Window x:Class="HelloInkCanvas.Window1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Ink="clr-namespace:System.Windows.Ink;assembly=PresentationCore"
    Title="Hello, InkCanvas!" Height="300" Width="300"
    >
  <Grid>
    <InkCanvas Name="inkCanvas1" Background="Ivory">
      <InkCanvas.DefaultDrawingAttributes>
        <Ink:DrawingAttributes xmlns:ink="system-windows-ink" Color="Red" Width="5" />
      </InkCanvas.DefaultDrawingAttributes>
    </InkCanvas>

    <!-- This stack panel of buttons is a sibling to InkCanvas (not a child) but overlapping it, 
         higher in z-order, so that ink is collected and rendered behind -->
    <StackPanel Name="buttonBar" VerticalAlignment="Top" Height="26" Orientation="Horizontal" Margin="5">
      <Button Click="Ink">Ink</Button>
      <Button Click="Highlight">Highlight</Button>
      <Button Click="EraseStroke">EraseStroke</Button>
      <Button Click="Select">Select</Button>
    </StackPanel>
  </Grid>
</Window>
<Window x:Class="Window1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Ink="clr-namespace:System.Windows.Ink;assembly=PresentationCore"
    Title="Hello, InkCanvas!" Height="300" Width="300"
    >
  <Grid>
    <InkCanvas Name="inkCanvas1" Background="Ivory">
      <InkCanvas.DefaultDrawingAttributes>
        <Ink:DrawingAttributes xmlns:ink="system-windows-ink" Color="Red" Width="5" />
      </InkCanvas.DefaultDrawingAttributes>

    </InkCanvas>

    <!-- This stack panel of buttons is a sibling to InkCanvas (not a child) but overlapping it, 
         higher in z-order, so that ink is collected and rendered behind -->
    <StackPanel Name="buttonBar" VerticalAlignment="Top" Height="26" Orientation="Horizontal" Margin="5">
      <Button Click="Ink">Ink</Button>
      <Button Click="Highlight">Highlight</Button>
      <Button Click="EraseStroke">EraseStroke</Button>
      <Button Click="Select">Select</Button>
    </StackPanel>
  </Grid>
</Window>

بعد ذلك قم بإضافة معالجات الأحداث للزر التالي إلى ملف التعليمات البرمجية الخلفية داخل الفئة Window1.

' Set the EditingMode to ink input.
Private Sub Ink(ByVal sender As Object, ByVal e As RoutedEventArgs) 

    inkCanvas1.EditingMode = InkCanvasEditingMode.Ink

    ' Set the DefaultDrawingAttributes for a red pen.
    inkCanvas1.DefaultDrawingAttributes.Color = Colors.Red
    inkCanvas1.DefaultDrawingAttributes.IsHighlighter = False
    inkCanvas1.DefaultDrawingAttributes.Height = 2

End Sub 'Ink

' Set the EditingMode to highlighter input.
Private Sub Highlight(ByVal sender As Object, ByVal e As RoutedEventArgs) 

    inkCanvas1.EditingMode = InkCanvasEditingMode.Ink

    ' Set the DefaultDrawingAttributes for a highlighter pen.
    inkCanvas1.DefaultDrawingAttributes.Color = Colors.Yellow
    inkCanvas1.DefaultDrawingAttributes.IsHighlighter = True
    inkCanvas1.DefaultDrawingAttributes.Height = 25

End Sub 'Highlight


' Set the EditingMode to erase by stroke.
Private Sub EraseStroke(ByVal sender As Object, ByVal e As RoutedEventArgs) 

    inkCanvas1.EditingMode = InkCanvasEditingMode.EraseByStroke

End Sub 'EraseStroke

' Set the EditingMode to selection.
Private Sub [Select](ByVal sender As Object, ByVal e As RoutedEventArgs) 

    inkCanvas1.EditingMode = InkCanvasEditingMode.Select

End Sub 'Select
// Set the EditingMode to ink input.
private void Ink(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;

    // Set the DefaultDrawingAttributes for a red pen.
    inkCanvas1.DefaultDrawingAttributes.Color = Colors.Red;
    inkCanvas1.DefaultDrawingAttributes.IsHighlighter = false;
    inkCanvas1.DefaultDrawingAttributes.Height = 2;
}

// Set the EditingMode to highlighter input.
private void Highlight(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;

    // Set the DefaultDrawingAttributes for a highlighter pen.
    inkCanvas1.DefaultDrawingAttributes.Color = Colors.Yellow;
    inkCanvas1.DefaultDrawingAttributes.IsHighlighter = true;
    inkCanvas1.DefaultDrawingAttributes.Height = 25;
}

// Set the EditingMode to erase by stroke.
private void EraseStroke(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.EraseByStroke;
}

// Set the EditingMode to selection.
private void Select(object sender, RoutedEventArgs e)
{
    inkCanvas1.EditingMode = InkCanvasEditingMode.Select;
}

بعد نسخ هذه التعليمات البرمجية, اضغط F5 في Microsoft Visual Studio 2005 لتشغيل البرنامج في المصحح.

لاحظ كيف أن StackPanel يضع الأزرار الموجودة أعلى InkCanvas. إذا حاولت وضع حبر على أعلى الأزرار يقوم InkCanvas بتجميع ثم عرض الحبر خلف الأزرار. وهذا لأن الأزرار تكون بين العناصر المشابهة من InkCanvas مقابل للتوابع. أيضاً، الأزرار أعلى بترتيب z, بحيث يتم تقديم الحبر خلفها.

راجع أيضًا:

المرجع

DrawingAttributes

DefaultDrawingAttributes()

System.Windows.Ink