WPF DragDropEffects (DragDrop-2-)

索引サイト

(参考)http://code.msdn.microsoft.com/windowsdesktop/XAMLCVB-WPF-Windows-WPF-a1c048ae




<TabItem Header="Labels">
<StackPanel Orientation="Vertical">
<!-- ラベルどうしでドラッグ アンド ドロップ -->
<TextBox DockPanel.Dock="Top" Name="tbox11" Height="50"
Text="初期値でテキストボックス間ドラッグ アンド ドロップ可能" FontSize="16" />
<TextBox DockPanel.Dock="Top" Name="tbox12" Height="50"
Text="初期値でテキストボックス間ドラッグ アンド ドロップ可能" FontSize="18" />
<TextBox DockPanel.Dock="Top" Name="tbox13" Height="50"
Text="初期値でテキストボックス間ドラッグ アンド ドロップ可能" FontSize="20" />
<TextBox Height="30" Background="AliceBlue"/>
<TextBox Height="30" Background="AliceBlue"/>
<TextBox Height="30" Background="AliceBlue"/>
<TextBox Height="30" Background="AliceBlue"/>
<TextBox Height="30" Background="AliceBlue"/>
<Label DockPanel.Dock="Left" Name="lable1" Content="Item1-->ドラッグでこの文字をコピー(12345)***" AllowDrop="True"
MouseDown="lable_MouseDown" DragOver="label_DragOver" Drop="label_Drop" />
<Label DockPanel.Dock="Left" Name="lable2" Content="Item2-->ドラッグでこの文字をコピー(67890)*****" AllowDrop="True"
MouseDown="lable_MouseDown" DragOver="label_DragOver" Drop="label_Drop" />
<Label DockPanel.Dock="Left" Name="lable3" Content="Item3-->ドラッグでこの文字をコピー(ABCDE)*******" AllowDrop="True"
MouseDown="lable_MouseDown" DragOver="label_DragOver" Drop="label_Drop" />
<Label DockPanel.Dock="Left" Name="lable4" Content="Item4-->ドラッグでこの文字をコピー(FGHIJ)*********" AllowDrop="True"
MouseDown="lable_MouseDown" DragOver="label_DragOver" Drop="label_Drop" />
<Label DockPanel.Dock="Left" Name="lable5" Content="Item5-->ドラッグでこの文字をコピー(KLMNO)***********" AllowDrop="True"
MouseDown="lable_MouseDown" DragOver="label_DragOver" Drop="label_Drop" />
</StackPanel>
</TabItem>
<TabItem Header="FileDrop">
<!-- エクスプローラーからテキストファイルをドロップできる -->
<TextBox Name="tbox33" TextWrapping="Wrap"
PreviewDragOver="tbox33_PreviewDragOver" Drop="tbox33_Drop" />
</TabItem>

以下、基本はサンプルのまま




//***************************************
// Tab2
//***************************************
private void lable_MouseDown(object sender, MouseButtonEventArgs e)
{
// ドラッグ アンド ドロップを開始する
DragDrop.DoDragDrop(sender as Label, (sender as Label).Content.ToString(), DragDropEffects.Copy);
}
private void label_DragOver(object sender, DragEventArgs e)
{
// ドラッグされているものがテキストの場合だけ受け入れる
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effects = DragDropEffects.Copy;
}
}

private void label_Drop(object sender, DragEventArgs e)
{
// ドロップされたテキストを Content に割り当て
(sender as Label).Content = e.Data.GetData(DataFormats.Text);
}
//***************************************
// Tab3
//***************************************
private void tbox33_PreviewDragOver(object sender, DragEventArgs e)
{
// ファイルをドロップされた場合のみ e.Handled を True にする
e.Handled = e.Data.GetDataPresent(DataFormats.FileDrop);
}

private void tbox33_Drop(object sender, DragEventArgs e)
{
string[] files = e.Data.GetData(DataFormats.FileDrop) as string[];
if (files != null)
{
// 最初のファイルを SJIS テキストとして読み込む
using (var reader = new StreamReader(files[0], Encoding.GetEncoding("SJIS")))
tbox33.Text = reader.ReadToEnd();
}
}




AX