Windows Phone開發(21):做一個簡單的繪圖板 轉:http://blog.csdn.net/tcjiaan/article/details/7392179

來源:互聯網
上載者:User

其實我們今天要說的就是一個控制項——InkPresenter,這個控制項並不是十分強大,沒辦法和WPF中的InkCanvas相比,估計在實際開發中也很少可能會用到它,不過,我們還是來瞭解一下吧,畢竟用起來也不難。

 

使用該控制項沒有什麼技術含量,注意一下以下幾點就是了:

1、必須明確指定InkPresenter的寬度和高度,也就是不能使用自動值和Margin,不然不能收集墨跡,除非裡面有子項目;

2、要收集墨跡,要設定Clip屬性;

3、可以使用DrawingAttributes類設定墨跡的大小和顏色。

 

該控制項不能像WPF那樣自動實現收集墨跡的功能,也就是說只能是我們自己寫代碼了。

 

[html] view plaincopyprint?

  1. <Grid>  
  2.     <InkPresenter x:Name="MyPresenter"   
  3.                   HorizontalAlignment="Left"  
  4.                   VerticalAlignment="Top"   
  5.                   MouseLeftButtonDown="MyPresenter_MouseLeftButtonDown"  
  6.                   LostMouseCapture="MyPresenter_LostMouseCapture"  
  7.                   MouseMove="MyPresenter_MouseMove"  
  8.                   Background="Transparent"  
  9.                   Opacity="1" Width="480" Height="750" />  
  10. </Grid>  

 

[csharp] view plaincopyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Documents;  
  8. using System.Windows.Input;  
  9. using System.Windows.Media;  
  10. using System.Windows.Media.Animation;  
  11. using System.Windows.Shapes;  
  12. using Microsoft.Phone.Controls;  
  13. // 引入以下命名空間。  
  14. using System.Windows.Ink;  
  15.   
  16. namespace InkPresentSample  
  17. {  
  18.     public partial class MainPage : PhoneApplicationPage  
  19.     {  
  20.         Stroke CurrentStroke = null;  
  21.         // 建構函式  
  22.         public MainPage()  
  23.         {  
  24.             InitializeComponent();  
  25.   
  26.             // 設定剪輯,以便收集墨跡  
  27.             RectangleGeometry rg = new RectangleGeometry();  
  28.             // 為了使範圍準確,應使用控制項的最終呈現高度。  
  29.             rg.Rect = new Rect(0, 0, MyPresenter.ActualWidth, MyPresenter.ActualHeight);  
  30.             MyPresenter.Clip = rg;  
  31.         }  
  32.   
  33.         private void MyPresenter_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)  
  34.         {  
  35.             // 當我們點擊時獲捉滑鼠游標  
  36.             MyPresenter.CaptureMouse();  
  37.             // 收集當前的游標所在的位置的點  
  38.             StylusPointCollection sc = new StylusPointCollection();  
  39.             sc.Add(e.StylusDevice.GetStylusPoints(MyPresenter));  
  40.             CurrentStroke = new Stroke(sc);  
  41.             // 設定筆觸的顏色,大小  
  42.             CurrentStroke.DrawingAttributes.Color = Colors.Yellow;  
  43.             CurrentStroke.DrawingAttributes.Width = 8;  
  44.             CurrentStroke.DrawingAttributes.Height = 8;  
  45.             // 把新的筆觸添加到集合中  
  46.             MyPresenter.Strokes.Add(CurrentStroke);  
  47.         }  
  48.   
  49.         private void MyPresenter_LostMouseCapture(object sender, MouseEventArgs e)  
  50.         {  
  51.             // 當釋放滑鼠時,也同時釋放筆觸變數的引用  
  52.             CurrentStroke = null;  
  53.         }  
  54.   
  55.         private void MyPresenter_MouseMove(object sender, MouseEventArgs e)  
  56.         {  
  57.             if (CurrentStroke != null)  
  58.             {  
  59.                 // 每移動一次滑鼠,都收集對應的點。  
  60.                 CurrentStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(MyPresenter));  
  61.             }  
  62.         }  
  63.     }  
  64. }  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.