質問編集履歴
5
refactor
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,86 +3,9 @@
|
|
3
3
|
Visual Studio 2015 Communityを使っています。
|
4
4
|
|
5
5
|
###前提・実現したいこと
|
6
|
-
WPFで
|
6
|
+
WPFでDragDropしたいです。
|
7
7
|
|
8
|
-
###疑問点
|
9
|
-
(1)
|
10
|
-
DragDrop.DoDragDrop(textblock, textblock.Text, DragDropEffects.Copy);
|
11
|
-
DragDrop.DoDragDropの引数は、DependencyObject, object, DragDropEffectsなのだが、TextBlockをcopyしたい場合は、TextBlockをなにに入れればよいか。DependencyObjectなのか、それともobjectなのか?
|
12
8
|
|
13
|
-
(2)
|
14
|
-
Drag開始時の
|
15
|
-
DragDrop.DoDragDrop(textblock, textblock.Text, DragDropEffects.Copy);
|
16
|
-
の引数と
|
17
|
-
Dropしたときの、
|
18
|
-
private void WrapPanel_Drop(object sender, DragEventArgs e) {
|
19
|
-
の引数には関係はないのか?
|
20
|
-
ないとしたら、senderとeはどこから出てきて何が入っているのか。
|
21
|
-
|
22
|
-
(3)
|
23
|
-
DropしたときにTextBlockを取り出すにはどうしたらよいか。
|
24
|
-
下記の実装だとstringを取り出して新規にTextBlockをつくり、貼れると思う。
|
25
|
-
でも本当にやりたいのは、もともとのTextBlockをDropすること。
|
26
|
-
もともとのTextBlockをDropするにはどうしたらよいか。
|
27
|
-
Dropしたデータ(e?)から、TextBlockを取り出したい。
|
28
|
-
|
29
|
-
###該当のソースコード
|
30
|
-
```xaml
|
31
|
-
<Window x:Class="WpfApplication1.MainWindow"
|
32
|
-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
33
|
-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
34
|
-
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
35
|
-
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
36
|
-
xmlns:local="clr-namespace:WpfApplication1"
|
37
|
-
mc:Ignorable="d"
|
38
|
-
Title="MainWindow" Height="350" Width="525">
|
39
|
-
<Grid x:Name="MainGrid">
|
40
|
-
<TextBlock x:Name="text" Text="photocaption" Margin="10,100,10,10" MouseDown="TextBlock_MouseDown"/>
|
41
|
-
</Grid>
|
42
|
-
<WrapPanel x:Name="wrappanel" HorizontalAlignment="Left" Height="274" Margin="309,25,0,0" VerticalAlignment="Top" Width="138" Background="AliceBlue"
|
43
|
-
AllowDrop="True"
|
44
|
-
PreviewDragOver="WrapPanel_PreviewDragOver"
|
45
|
-
Drop="WrapPanel_Drop"
|
46
|
-
/>
|
47
|
-
</Grid>
|
48
|
-
</Window>
|
49
|
-
```
|
50
|
-
```C#
|
51
|
-
using System.Windows;
|
52
|
-
using System.Windows.Controls;
|
53
|
-
using System.Windows.Input;
|
54
|
-
|
55
|
-
namespace WpfApplication1 {
|
56
|
-
public partial class MainWindow : Window {
|
57
|
-
public MainWindow() {
|
58
|
-
InitializeComponent();
|
59
|
-
}
|
60
|
-
|
61
|
-
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e) {
|
62
|
-
if (sender.GetType().Equals(typeof(TextBlock))) {
|
63
|
-
TextBlock textblock = new TextBlock();
|
64
|
-
textblock.Text = ((TextBlock)sender).Text;
|
65
|
-
DragDrop.DoDragDrop(textblock, textblock.Text, DragDropEffects.Copy);
|
66
|
-
}
|
67
|
-
}
|
68
|
-
|
69
|
-
private void WrapPanel_PreviewDragOver(object sender, DragEventArgs e) {
|
70
|
-
e.Effects = DragDropEffects.All;
|
71
|
-
e.Handled = true;
|
72
|
-
}
|
73
|
-
|
74
|
-
private void WrapPanel_Drop(object sender, DragEventArgs e) {
|
75
|
-
WrapPanel panel = sender as WrapPanel;
|
76
|
-
string value = (string)e.Data.GetData(typeof(string));
|
77
|
-
TextBox textbox = new TextBox();
|
78
|
-
textbox.Text = value;
|
79
|
-
panel.Children.Add(textbox);
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}
|
83
|
-
|
84
|
-
```
|
85
|
-
|
86
9
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
87
10
|
Microsoft Visual Studio Community 2015
|
88
11
|
Version 14.0.25424.00 Update 3
|
4
typo
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
Visual Studio 2015 Communityを使っています。
|
4
4
|
|
5
5
|
###前提・実現したいこと
|
6
|
-
WPFで
|
6
|
+
WPFでTextBlockをDragDropしたいです。
|
7
7
|
|
8
8
|
###疑問点
|
9
9
|
(1)
|
3
typo
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
WPFで
|
1
|
+
WPFでTextBlockをDragDropしたいです。
|
body
CHANGED
File without changes
|
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
Dropしたときの、
|
18
18
|
private void WrapPanel_Drop(object sender, DragEventArgs e) {
|
19
19
|
の引数には関係はないのか?
|
20
|
+
ないとしたら、senderとeはどこから出てきて何が入っているのか。
|
20
21
|
|
21
22
|
(3)
|
22
23
|
DropしたときにTextBlockを取り出すにはどうしたらよいか。
|
@@ -25,13 +26,6 @@
|
|
25
26
|
もともとのTextBlockをDropするにはどうしたらよいか。
|
26
27
|
Dropしたデータ(e?)から、TextBlockを取り出したい。
|
27
28
|
|
28
|
-
|
29
|
-
###発生している問題・エラーメッセージ
|
30
|
-
DragDrop.DoDragDrop(textblock, textblock.Text, DragDropEffects.Copy);
|
31
|
-
//DragDrop.DoDragDrop(sender as TextBlock, textblock.Text, DragDropEffects.Copy);
|
32
|
-
//型 'System.NullReferenceException' のハンドルされていない例外が PresentationCore.dll で発生しました
|
33
|
-
//追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。
|
34
|
-
|
35
29
|
###該当のソースコード
|
36
30
|
```xaml
|
37
31
|
<Window x:Class="WpfApplication1.MainWindow"
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -19,14 +19,10 @@
|
|
19
19
|
の引数には関係はないのか?
|
20
20
|
|
21
21
|
(3)
|
22
|
-
private void WrapPanel_PreviewDragOver(object sender, DragEventArgs e) {
|
23
|
-
//if (e.Data.GetDataPresent(DataFormats.Text, true)) <-この行は必要か? 必要だとしたらTextBlockのときはDataFormatsをどう書けばよいか?
|
24
|
-
|
25
|
-
|
22
|
+
DropしたときにTextBlockを取り出すにはどうしたらよいか。
|
26
|
-
下記の実装だと
|
23
|
+
下記の実装だとstringを取り出して新規にTextBlockをつくり、貼れると思う。
|
27
24
|
でも本当にやりたいのは、もともとのTextBlockをDropすること。
|
28
25
|
もともとのTextBlockをDropするにはどうしたらよいか。
|
29
|
-
string[] texts = e.Data.GetData(DataFormats.Text) as string[];
|
30
26
|
Dropしたデータ(e?)から、TextBlockを取り出したい。
|
31
27
|
|
32
28
|
|
@@ -73,25 +69,20 @@
|
|
73
69
|
TextBlock textblock = new TextBlock();
|
74
70
|
textblock.Text = ((TextBlock)sender).Text;
|
75
71
|
DragDrop.DoDragDrop(textblock, textblock.Text, DragDropEffects.Copy);
|
76
|
-
//DragDrop.DoDragDrop(sender as TextBlock, textblock.Text, DragDropEffects.Copy);
|
77
72
|
}
|
78
73
|
}
|
79
74
|
|
80
75
|
private void WrapPanel_PreviewDragOver(object sender, DragEventArgs e) {
|
81
|
-
//if (e.Data.GetDataPresent(DataFormats.Text, true)) {
|
82
76
|
e.Effects = DragDropEffects.All;
|
83
77
|
e.Handled = true;
|
84
|
-
//}
|
85
78
|
}
|
86
79
|
|
87
80
|
private void WrapPanel_Drop(object sender, DragEventArgs e) {
|
88
81
|
WrapPanel panel = sender as WrapPanel;
|
89
|
-
string
|
82
|
+
string value = (string)e.Data.GetData(typeof(string));
|
90
|
-
if (0< texts.Length) {
|
91
|
-
|
83
|
+
TextBox textbox = new TextBox();
|
92
|
-
|
84
|
+
textbox.Text = value;
|
93
|
-
|
85
|
+
panel.Children.Add(textbox);
|
94
|
-
}
|
95
86
|
}
|
96
87
|
}
|
97
88
|
}
|