ビヘイビアーの制作
それでは,
SketchFlowサンプルの中の画面の1つであるプランニング画面では,
図3
サンプルでは以下リスト1のように記述します。省略部分はサンプルソースをご覧ください。
リスト1 TimelineDragBehavior.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interactivity;
namespace TravelPlannerScreens
{
public class TimelineDragBehavior : Behavior<FrameworkElement>
{
// 吸着単位
private double moveUnit = 0;
// マウスダウン位置
private Point mouseDownPoint;
// ドラッグ開始のエレメント位置
private Point dragStartElementPoint;
// ドラッグ中フラグ
private bool mouseIsDragging = false;
/// <summary>
/// 吸着単位
/// </summary>
public double MoveUnit
{
get { return this.moveUnit; }
set { this.moveUnit = value; }
}
protected override void OnAttached()
{
base.OnAttached();
// Behavior がオブジェクトにアタッチされた時に実行したいコードを挿入します。
this.AssociatedObject.MouseLeftButtonDown += new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);
this.AssociatedObject.MouseLeftButtonUp += new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonUp);
this.AssociatedObject.MouseMove += new MouseEventHandler(AssociatedObject_MouseMove);
}
protected override void OnDetaching()
{
base.OnDetaching();
// Behavior がオブジェクトから削除された時に実行したいコードを挿入します。
this.AssociatedObject.MouseLeftButtonDown -= new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);
this.AssociatedObject.MouseLeftButtonUp -= new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonUp);
this.AssociatedObject.MouseMove -= new MouseEventHandler(AssociatedObject_MouseMove);
}
// マウスダウンイベントハンドラ
void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 省略
}
// マウスアップイベントハンドラ
void AssociatedObject_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
// 省略
}
// マウスムーブイベントハンドラ
void AssociatedObject_MouseMove(object sender, MouseEventArgs e)
{
// 省略
}
}
}