InkPresenterのマウスの左ボタンが押下された時の処理(InkPresenterがホールドされた時の処理)
CaptureMouseメソッドでInkPresenter1にマウスをキャプチャします。
インクストロークを表す新しいインスタンスmyStrokeオブジェクトを作成します。
ストロークの色を指定し、ストロークの幅と高さを20に指定しています。ここの値を変えるとストロークの幅や高さが太くなったり、細くなったりします。
ストロークのスタイラスポイントにAddメソッドで、InkPresenter コントロールに描画されたストロークのスタイラスポイントを追加します。InkPresenter1にスタイラスポイントの追加されたmyStrokeオブジェクトを追加します。
01 | Private Sub InkPresenter1_MouseLeftButtonDown(sender As Object, e As System.Windows.Input.MouseButtonEventArgs) Handles InkPresenter1.MouseLeftButtonDown |
02 | InkPresenter1.CaptureMouse() |
03 | myStroke = New Stroke() |
05 | myStroke.DrawingAttributes.Color = Color.FromArgb(100, 255, 0, 51) |
06 | myStroke.DrawingAttributes.Width = 20 |
07 | myStroke.DrawingAttributes.Height = 20 |
08 | myStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(InkPresenter1)) |
09 | InkPresenter1.Strokes.Add(myStroke) |
InkPresenterからマウスの左ボタンが離された時(指が離された)の処理。
インクストロークの関連付けをなくします。ReleaseMouseCaptureメソッドで、InkPresenterがマウスキャプチャを保持していた場合、キャプチャを解放します。
1 | Private Sub InkPresenter1_MouseLeftButtonUp(sender As Object, e As System.Windows.Input.MouseButtonEventArgs) Handles InkPresenter1.MouseLeftButtonUp |
3 | InkPresenter1.ReleaseMouseCapture() |
InkPresenter上でマウスを移動させた(指を移動させた)時の処理
インクストロークがアクティブな時は、ストロークのスタイラスポイントにAddメソッドで、InkPresenter コントロールに描画されたストロークのスタイラスポイントを追加します。指でなぞった上をストロークが描画されていきます。
1 | Private Sub InkPresenter1_MouseMove(sender As Object, e As System.Windows.Input.MouseEventArgs) Handles InkPresenter1.MouseMove |
2 | If myStroke Is Nothing = False Then |
3 | myStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(InkPresenter1)) |
ApplicationBarIconButtonのフロッピーのアイコン(保存)がタップされた時の処理
変数storageを、ファイルとディレクトリを格納している分離ストレージ領域を表すIsolateStorageFileクラスとして宣言します。Path.CombineでmyPoemというフォルダとメンバ変数noと.xmlを連結して、変数xmlFilePathに格納します。同じくMarkerInfoという文字列と、メンバ変数noと.xmlを連結して、変数markerPathに格納しておきます。
Visual Basic の埋め込み式を用いて、XML宣言とルート要素、その子要素として、を定義し、埋め込み式の構文である を用いてpoemTextBlockの値を指定します。これは ASP.NET で使用される構文と同じです。
分離ストレージ内のファイルを表すIsolatedStorageFileStreamクラス用オブジェクト変数xmlStreamを用意し、IsolatedStorageFile.CreateFileメソッドで、分離ストレージ内にxmlFilePath変数の持っているフォルダ名付きXMLファイルを作成します。
ファイルが存在する場合は、新しいStreamWriterを生成し、IsolatedStorageFile.OpenFileメソッドで、指定したファイルアクセスを使用して指定したモードでファイルを開き、初期化します。Writeメソッドで埋め込み式のXMLをストリームに書き込みます。
分離ストレージ内のファイルを表すIsolatedStorageFileStreamクラス用オブジェクト変数Streamを用意し、IsolatedStorageFile.CreateFileメソッドで、分離ストレージ内にmarkerPath変数の持っているフォルダ名付きXMLファイルを作成します。Stroke オブジェクトのコレクションで初期化された、XmlSerializerクラスの新しいインスタンスを作成します。
XmlSerializer.Serialize (Stream, Object)の書式で、指定した Object をシリアル化し、生成されたXMLドキュメントを、指定した Stream を使用してファイルに書き込みます。
保存した旨のメッセージを表示します。
01 | Private Sub GoSave(sender As System.Object, e As EventArgs) |
02 | Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication |
03 | Dim xmlFilePath As String = Path.Combine("myPoem", no & ".xml") |
04 | Dim markerPath As String = Path.Combine("myPoem", "MarkerInfo" & no & ".xml") |
05 | Dim xmldoc As XDocument = <?xml version="1.0" encoding="utf-8"?> |
07 | <内容><%= poemTextBlock.Text %></内容> |
09 | Using xmlStream As IsolatedStorageFileStream = storage.CreateFile(xmlFilePath) |
12 | If storage.FileExists(xmlFilePath) = True Then |
13 | Using writer As StreamWriter = New StreamWriter(storage.OpenFile(xmlFilePath, FileMode.Open, FileAccess.Write)) |
15 | writer.Write(xmldoc.ToString) |
18 | Using Stream As IsolatedStorageFileStream = storage.CreateFile(markerPath) |
19 | Dim xs As XmlSerializer = New XmlSerializer(GetType(StrokeCollection)) |
20 | xs.Serialize(Stream, InkPresenter1.Strokes) |
22 | MessageBox.Show("保存しました。") |
ApplicationBarIconButtonの×のアイコン(クリア)がタップされた時の処理
インクのストロークをクリアします。
1 | Private Sub GoClear(sender As Object, e As EventArgs) |
2 | InkPresenter1.Strokes.Clear() |
[次]ボタンがタップされた時の処理
1 | Private Sub nextButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles nextButton.Click |
インクのストロークをクリアします。
[前]ボタンの使用を可能にします。メンバ変数noが4の場合は、[次]ボタンの使用を不可とします。それ以外の場合は、[前]ボタンの使用を可能にし、メンバ変数noの値を1ずつ増加させます。DataShowプロシージャを実行します。
01 | InkPresenter1.Strokes.Clear() |
02 | prevButton.IsEnabled = True |
04 | nextButton.IsEnabled = False |
07 | prevButton.IsEnabled = True |
[前]ボタンがタップされた時の処理
インクのストロークをクリアします。
メンバ変数noの値が1か1より小さい場合は、[前]ボタンの使用を不可とします。それ以外の場合は、[前]ボタンの使用を可とします。メンバ変数noの値を1ずつ減少させます。DataShowプロシージャを実行します。
01 | Private Sub prevButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles prevButton.Click |
02 | InkPresenter1.Strokes.Clear() |
04 | prevButton.IsEnabled = False |
07 | prevButton.IsEnabled = True |
【参照リンク】
PROJECT KySSでは現在、16個のWindows PhoneアプリをMarketplaceに公開しています。試用版もありますので、興味のある方はお試しください。
→参照:Windows Phone App Information(PROJECT KySS)