teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

refactor

2016/10/18 07:21

投稿

cancat
cancat

スコア313

title CHANGED
File without changes
body CHANGED
@@ -3,86 +3,9 @@
3
3
  Visual Studio 2015 Communityを使っています。
4
4
 
5
5
  ###前提・実現したいこと
6
- WPFでTextBlockをDragDropしたいです。
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

2016/10/18 07:20

投稿

cancat
cancat

スコア313

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  Visual Studio 2015 Communityを使っています。
4
4
 
5
5
  ###前提・実現したいこと
6
- WPFでTextBlackDrapDropしたいです。
6
+ WPFでTextBlockDragDropしたいです。
7
7
 
8
8
  ###疑問点
9
9
  (1)

3

typo

2016/10/18 01:04

投稿

cancat
cancat

スコア313

title CHANGED
@@ -1,1 +1,1 @@
1
- WPFでTextBlackDrapDropしたいです。
1
+ WPFでTextBlockDragDropしたいです。
body CHANGED
File without changes

2

追記

2016/10/18 01:04

投稿

cancat
cancat

スコア313

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

修正

2016/10/17 07:52

投稿

cancat
cancat

スコア313

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
- (4)DropしたときにTextBlockを取り出すにはどうしたらよいか。
22
+ DropしたときにTextBlockを取り出すにはどうしたらよいか。
26
- 下記の実装だと(動作していないが、動作すれば)stringを取り出して新規にTextBlockをつくり、貼れると思う。
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[] texts = e.Data.GetData(DataFormats.Text) as string[];
82
+ string value = (string)e.Data.GetData(typeof(string));
90
- if (0< texts.Length) {
91
- TextBlock textblock = new TextBlock();
83
+ TextBox textbox = new TextBox();
92
- textblock.Text = texts[0];
84
+ textbox.Text = value;
93
- panel.Children.Add(textblock);
85
+ panel.Children.Add(textbox);
94
- }
95
86
  }
96
87
  }
97
88
  }