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

回答編集履歴

1

質問内容にあった、回答を追加しました。

2016/08/26 12:57

投稿

flied_onion
flied_onion

スコア2604

answer CHANGED
@@ -1,3 +1,50 @@
1
+ **追記しました**
2
+
3
+ C#でそのxaml相当の事をしたいという事でしたね、ごめんなさい。
4
+
5
+ 多分以下の様にすれば行けると思います(DataGridの名前にByCodeがついてます。私が区別するためにつけただけですので適宜削除してください)。
6
+ 一応クラスライブラリ(アセンブリ名:imageDataGridのimageDataGrid.dll)を参照して表示することは確認しています。(元のXAMLも、C#も)
7
+
8
+
9
+ ```xaml
10
+ <DataGrid x:Name="AdditionGridByCode" AutoGenerateColumns="False">
11
+ </DataGrid>
12
+ ```
13
+
14
+ ```C#
15
+ var source = new BitmapImage(new Uri("pack://application:,,,/imageDataGrid;component/Images/Ok.png", UriKind.RelativeOrAbsolute));
16
+
17
+ var image = new FrameworkElementFactory(typeof(Image));
18
+ image.Name = "Status";
19
+ image.SetValue(Image.HeightProperty, 50.0);
20
+ image.SetValue(Image.WidthProperty, 50.0);
21
+ image.SetValue(Image.SourceProperty, source);
22
+
23
+ var cellTemplate = new DataTemplate(typeof(DataGridTemplateColumn));
24
+ cellTemplate.VisualTree = image;
25
+
26
+ var status = new DataGridTemplateColumn();
27
+ status.CellTemplate = cellTemplate;
28
+ status.Header = "Status";
29
+
30
+ AdditionGridByCode.Columns.Add(status);
31
+ ```
32
+
33
+ ポイントは…なんでしょう。DataTemplateのtypeofに参照先の型を参照先にしてあげるのと、
34
+ FrameworkElementFactoryを使って DataTemplateのVisualTreeにImageをElementで追加してあげるところでしょうか。
35
+
36
+ XAMLで書いた場合と違ってUriが違うとエラーになってしまう点に気を付けてください。
37
+
38
+
39
+
40
+ ---
41
+
42
+ 以下、勘違いしていた時の回答。
43
+
44
+ うまくいかなかったとのコメントがありましたが、私の方ではうまくいきました。
45
+ そこがちょっと気にはなりますが、本質問と関係ないので深追いはしません。
46
+ (Resourceと埋め込まれたリソースを間違えたとかかなぁ。ライブラリの方でやっているしそれはなさそうに思いますが。まぁ、私がちゃんと質問の意図読み取れてなかったので齟齬があったせいだと思います。)
47
+
1
48
  これだけだと利用イメージがつかめないですが、バインドするだけの簡単なサンプルを挙げておきます。
2
49
 
3
50
  ```xaml
@@ -59,6 +106,6 @@
59
106
  }
60
107
  ```
61
108
 
62
- ![OK.png](0b1d371eec5ad9b998c2d46ffbf5a33f.png)
109
+ OK.pngのプロパティ様に貼ってあった画像は削除しました。必要なら履歴から参照してください。
63
110
 
64
111
  テキストなどもバインドするなら、ObservableCollectionも検討してみてください。