クリップボードを使用する

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);
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください