2016-05-19 20 views
-1

データグリッドの列にイメージが必要です。各セルについて、ツールチップに大きなイメージを表示する必要があります。 DataGridはMyOBjectsのObsevarbleCollectionにバインドされ、MyImageとMyBigImageはMyObjectのプロパティです。 XAMLで はここで働いコードがある:WPF Tooltip Image in Datagrid Column

<c1:C1DataGrid.Columns> 
      <c1:DataGridTemplateColumn> 
       <c1:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Image Source="{Binding MyImage}" > 
          <Image.ToolTip> 
           <ToolTip > 
            <StackPanel> 
             <Image Source="{Binding MyBigImage}" /> 
            </StackPanel> 
           </ToolTip> 
          </Image.ToolTip> 
         </Image> 
        </DataTemplate> 
       </c1:DataGridTemplateColumn.CellTemplate> 
      </c1:DataGridTemplateColumn> 
     </c1:C1DataGrid.Columns> 

しかし、私はC#の側にコードを移動する必要があります。 は、だから私はこのコードを試してみた:このコードで

C1.WPF.DataGrid.DataGridTemplateColumn col1 = new 
C1.WPF.DataGrid.DataGridTemplateColumn(); 

FrameworkElementFactory factoryImg = new 
FrameworkElementFactory(typeof(Image)); 

Binding b1 = new Binding("MyImage"); 
b1.Mode = BindingMode.TwoWay; 
factoryImg.SetValue(Image.SourceProperty, b1); 
DataTemplate ttTemplate = new DataTemplate(typeof(StackPanel));   

FrameworkElementFactory spFactory = new 
FrameworkElementFactory(typeof(StackPanel)); 
spFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal); 
FrameworkElementFactory imgHolder = new 
FrameworkElementFactory(typeof(Image)); 
Binding b2 = new Binding("MyBigImage"); 
b2.Mode = BindingMode.TwoWay; 
imgHolder.SetBinding(Image.SourceProperty, b2); 
spFactory.AppendChild(imgHolder); 
ttTemplate.VisualTree = spFactory; 
ToolTip tt = new System.Windows.Controls.ToolTip(); 
tt.ContentTemplate = ttTemplate; 
factoryImg.SetValue(TextBlock.ToolTipProperty, tt); 
DataTemplate cellTemplate1 = new DataTemplate(); 
cellTemplate1.VisualTree = factoryImg; 
col1.CellTemplate = cellTemplate1; 
MyDataGrid.Columns.Add(col1); 
cellTemplate1.Seal(); 

セル内の画像が正しく表示されますが、画像上のツールチップが空のパネルで、何の画像が可視化されていません。 新しいBitmapImageを作成した場合、ツールチップが機能するので、バインディングの問題だと思います。 私は間違っていますか?

答えて

0

[OK]を、私はDataContextプロパティを設定するのを忘れてましたが、解決:

imgHolder.SetValue(TextBlock.DataContextProperty、リスト)。