2013年06月27日

WPFサンプル:コントロール間のDrag&Drop

   このエントリーをはてなブックマークに追加 Clip to Evernote
WPFのTextBoxには、標準でドラッグ&ドロップの機能が備わっています。
AllowDropプロパティをtrueにすることで(規定値 true)、テキストを受け取ることができるようになります。TextBok間では、C#でコードを書く必要はありません。
まずは、このサンプルのスクリーンショット。

DDTextBox1

DDTextBox2

スクリーンショットから分かるように、TextBoxからTextBoxへD&Dされたテキストは移動となります。複写させたい場合は、Ctrlキーを押しながらDrag&Dropします。
XAMLは以下のとおりです。

<Window x:Class="DragDropTextBoxSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"/>
            <RowDefinition Height="2*"/>
            <RowDefinition Height="2*"/>
        </Grid.RowDefinitions>
        <TextBox Margin="10" TextWrapping="Wrap" AllowDrop="True"
                 HorizontalAlignment="Stretch" />
        <TextBox Margin="10" Grid.Row="1" TextWrapping="Wrap" AllowDrop="True"
                 HorizontalAlignment="Stretch" />
        <TextBlock Margin="10" Grid.Row="2" TextWrapping="Wrap" AllowDrop="True"
                   Background="BlanchedAlmond"
                 HorizontalAlignment="Stretch" Drop="TextBlock_Drop" />
    </Grid>
</Window>
<!-- AllowDrop を true にする(規定値)で、ドラッグ&ドロップ可能 -->

なお、このサンプルプログラムでは、TextBoxからTextBlockへのDrag&Dropも実装しています。
TextBoxからTextBlockへのDrag&Dropは、AllowDropプロパティをtrueにするだけでは 実現することができません。C#で以下のようなイベントハンドラを書く必要があります。

private void TextBlock_Drop(object sender, DragEventArgs e) {
    (e.Source as TextBlock).Text =  e.Data.GetData(typeof(string)) as string;
}

DDTextBox3

DDTextBox4


WPFサンプル・目次


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52326263