2016-05-19 11 views
-1

Ich brauche eine Datagrid-Spalte mit einem Bild, und für jede Zelle muss ich im Tooltip das größere Bild sehen. Das Datagrid ist an einer ObsevarbleCollection von MyOBjects gebunden, und MyImage und MyBigImage sind Funktionen von MyObject. Mit XAML hier gibt es den Arbeitscode:WPF Tooltip Bild in Datagrid Spalte

<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> 

Aber ich brauche den Code in C# Seite zu bewegen. Also habe ich diesen Code versucht:

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(); 

Mit diesem Code das Bild in der Zelle korrekt angezeigt wird, aber der Tooltip auf dem Bild ist eine leere Tafel, wird kein Bild sichtbar gemacht. Wenn ich ein neues BitmapImage erstelle, funktioniert der Tooltip, also denke ich, dass es ein bindendes Problem ist. Was mache ich falsch?

Antwort

0

Ok gelöst, ich habe vergessen, die Datacontext-Eigenschaft festlegen:

imgHolder.SetValue (TextBlock.DataContextProperty, Liste);