2012-03-14 10 views
0

実行時に列が定義されたwpfデータグリッドでイメージを正しく表示する方法については、XAMLで列を定義できません。実行時に定義されたwpfデータグリッドにビットマップイメージを表示

Myグリッドの基になるコレクションには、特定のイメージに関連する整数フィールドが含まれています。

私は実行時に自分のデータグリッドにDataGridTextColumn列を作成し、バインドしてコンバーターを設定します。

Binding binding = new Binding("MyIntegerField"); 
binding.Converter = new Converters.IconIndexToImageConverter(); 

と私のコンバータはこのように見えます。

public class IconIndexToImageConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     System.Drawing.Bitmap bitmap = null; 
     if (value != null) 
     { 
      int imageIndex = (int)value; 
      switch (imageIndex) 
      { 
       case 1: 
        return Properties.Resources.clip; 

グリッドでは画像は表示されませんが、タイプ名System.Drawing.Bitmapが表示されます。その他のバインドされたフィールドはすべて正しく表示されています。

コンバーターがこの列に対してヒットしているのがわかります。バインディングに何か不足していますか?

おかげで....

+0

なぜDataGrid ** Text ** Columnが正しい選択だと思われますか?また、なぜSystem.Drawing.Bitmapですか? –

+0

そのおかげで...私が浮上しているイメージは、リソースファイルにSystem.Drawing.Bitmapとして保存されています。私はDataGridTemplateColumnを使用すべきですか? –

+0

回答を参照してください。ところで、XAMLでそれを定義できないのはなぜですか?彼らは十分な経験がないので、しばしば人々はできないと思う。この場合、少なくともXAMLの列のテンプレートを[リソース]として定義することができます(http://msdn.microsoft.com/en-us/library/ms750613.aspx)。 –

答えて

1

私はDataGridTemplateColumnを使用する必要がありますか。

はい、そのSourceとしてあなたのイメージを持っているImageコントロールをインスタンス化したテンプレートと組み合わせて、WPFはImageSource基底クラスと連携し、あなたはBitmapを変換する必要があります。検索には、すでに質問があるはずです(Interopクラスが役に立ちます)。

関連する問題