我需要一个带有一些图像的datagrid列,对于我需要在工具提示中看到的每个单元格,图像越大。 datagrid绑定在MyOBjects的ObsevarbleCollection上,MyImage和MyBigImage是MyObject的属性。使用XAML,有工作代码:
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding MyImage}" >
<Image.ToolTip>
<ToolTip >
<StackPanel>
<Image Source="{Binding MyBigImage}" />
</StackPanel>
</ToolTip>
</Image.ToolTip>
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
但我需要在c#端移动代码。所以我试过这段代码:
DataGridTemplateColumn col1 = new 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.SetValue(TextBlock.DataContextProperty, this.pieces);
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;
grdDataItems.Columns.Add(col1);
cellTemplate1.Seal();
在列的datagrid单元格中,我从“MyImage”中看到了正确的图像,但在单元格的工具提示中,我总是看到“MyBigImage”集合的第一个元素的图像。 我该如何解决这个问题?
此致