Windows Phone開發(21):做一個簡單的繪圖板

來源:互聯網
上載者:User

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

 

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

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

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

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

 

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

 

<Grid><br /> <InkPresenter x:Name="MyPresenter"<br /> HorizontalAlignment="Left"<br /> VerticalAlignment="Top"<br /> MouseLeftButtonDown="MyPresenter_MouseLeftButtonDown"<br /> LostMouseCapture="MyPresenter_LostMouseCapture"<br /> MouseMove="MyPresenter_MouseMove"<br /> Background="Transparent"<br /> Opacity="1" Width="480" Height="750" /><br /> </Grid><br />

 

using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Net;<br />using System.Windows;<br />using System.Windows.Controls;<br />using System.Windows.Documents;<br />using System.Windows.Input;<br />using System.Windows.Media;<br />using System.Windows.Media.Animation;<br />using System.Windows.Shapes;<br />using Microsoft.Phone.Controls;<br />// 引入以下命名空間。<br />using System.Windows.Ink;</p><p>namespace InkPresentSample<br />{<br /> public partial class MainPage : PhoneApplicationPage<br /> {<br /> Stroke CurrentStroke = null;<br /> // 建構函式<br /> public MainPage()<br /> {<br /> InitializeComponent();</p><p> // 設定剪輯,以便收集墨跡<br /> RectangleGeometry rg = new RectangleGeometry();<br /> // 為了使範圍準確,應使用控制項的最終呈現高度。<br /> rg.Rect = new Rect(0, 0, MyPresenter.ActualWidth, MyPresenter.ActualHeight);<br /> MyPresenter.Clip = rg;<br /> }</p><p> private void MyPresenter_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)<br /> {<br /> // 當我們點擊時獲捉滑鼠游標<br /> MyPresenter.CaptureMouse();<br /> // 收集當前的游標所在的位置的點<br /> StylusPointCollection sc = new StylusPointCollection();<br /> sc.Add(e.StylusDevice.GetStylusPoints(MyPresenter));<br /> CurrentStroke = new Stroke(sc);<br /> // 設定筆觸的顏色,大小<br /> CurrentStroke.DrawingAttributes.Color = Colors.Yellow;<br /> CurrentStroke.DrawingAttributes.Width = 8;<br /> CurrentStroke.DrawingAttributes.Height = 8;<br /> // 把新的筆觸添加到集合中<br /> MyPresenter.Strokes.Add(CurrentStroke);<br /> }</p><p> private void MyPresenter_LostMouseCapture(object sender, MouseEventArgs e)<br /> {<br /> // 當釋放滑鼠時,也同時釋放筆觸變數的引用<br /> CurrentStroke = null;<br /> }</p><p> private void MyPresenter_MouseMove(object sender, MouseEventArgs e)<br /> {<br /> if (CurrentStroke != null)<br /> {<br /> // 每移動一次滑鼠,都收集對應的點。<br /> CurrentStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(MyPresenter));<br /> }<br /> }<br /> }<br />}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.