InkCanvas コントロールはクリップボードを使用することができ、描画したストロークをコピー、切り取り、貼り付けすることができます。
クリップボードを使用する際は、最初に EditingMode プロパティに Select を指定し、ストロークを選択できる状態にしておきます。
コピーをする場合は CopySelection メソッドを、切り取りをする場合はCutSelection メソッドを、貼り付けをする場合は Paste メソッドを使用します。
クリップボード用メソッド
メソッド名説明 CopySelection 選択されたストロークをコピーする CutSelection 選択されたストロークを切り取る Paste クリップボードにあるストロークを貼り付ける
下記は、クリップボードを使用する例です。
[コピー]ボタンが押されると、選択されたストロークをコピーし、[カット]ボタンをクリックすると選択されたストロークを切り取ります。また、右クリックをするとクリップボードにあるストロークを貼り付けます。
XAMLの例
<StackPanel>
<StackPanel Orientation="Horizontal">
<Button Name="btnInk" Content="インク"/>
<Button Name="btnSelect" Content="選択"/>
<Button Name="btnCopy" Content="コピー" Margin="5,0,0,0"/>
<Button Name="btnCut" Content="カット" />
</StackPanel>
<InkCanvas Name="InkCanvas1" EditingMode="Ink" />
</StackPanel>
VBの例
' [インク]ボタンクリック時の処理
Private Sub btnInk_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnInk.Click
'インクを使用できる状態にする
InkCanvas1.EditingMode = InkCanvasEditingMode.Ink
End Sub
' [選択]ボタンクリック時の処理
Private Sub btnSelect_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnSelect.Click
'描画されたストロークを選択できる状態にする
InkCanvas1.EditingMode = InkCanvasEditingMode.Select
End Sub
' [コピー]ボタンクリック時の処理
Private Sub btnCopy_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnCopy.Click
'選択されたストロークをクリップボードにコピー
InkCanvas1.CopySelection()
End Sub
' [カット]ボタンクリック時の処理
Private Sub btnCut_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnCut.Click
'選択されたストロークをカットしてクリップボードにコピー
InkCanvas1.CutSelection()
End Sub
' マウスダウン時の処理
Private Sub InkCanvas1_PreviewMouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles InkCanvas1.PreviewMouseDown
'マウスの右ボタンが押されたか?
If e.RightButton = MouseButtonState.Pressed Then
'右ボタンが押された位置を取得
Dim position As System.Windows.Point
position = e.GetPosition(InkCanvas1)
'貼り付け可能か?
If InkCanvas1.CanPaste() Then
'右ボタンが押された位置に貼り付け
InkCanvas1.Paste(position)
End If
End If
End Sub
C#の例
// [インク]ボタンクリック時の処理
private void btnInk_Click(object sender, RoutedEventArgs e)
{
//インクを使用できる状態にする
inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;
}
// [選択]ボタンクリック時の処理
private void btnSelect_Click(object sender, RoutedEventArgs e)
{
// 描画されたストロークを選択できる状態にする
inkCanvas1.EditingMode = InkCanvasEditingMode.Select;
}
// [コピー]ボタンクリック時の処理
private void btnCopy_Click(object sender, RoutedEventArgs e)
{
// 選択されたストロークをクリップボードにコピー
inkCanvas1.CopySelection();
}
// [カット]ボタンクリック時の処理
private void btnCut_Click(object sender, RoutedEventArgs e)
{
// 選択されたストロークをカットしてクリップボードにコピー
inkCanvas1.CutSelection();
}
// マウスダウン時の処理
private void inkCanvas1_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
// マウスの右ボタンが押されたか?
if (e.RightButton == MouseButtonState.Pressed)
{
// 右ボタンが押された位置を取得
Point position;
position = e.GetPosition(inkCanvas1);
// 貼り付け可能か?
if (inkCanvas1.CanPaste())
// 右ボタンが押された位置に貼り付け
inkCanvas1.Paste(position);
}
}
