Datagrid列中的WPF工具提示图像

时间:2016-05-19 09:29:16

标签: wpf datagrid

我需要一个带有一些图像的datagrid列,对于我需要在工具提示中看到的每个单元格,图像越大。 datagrid绑定在MyOBjects的ObsevarbleCollection上,MyImage和MyBigImage是MyObject的属性。 使用XAML,有工作代码:

<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工具提示工作,所以我认为这是一个绑定问题。 我做错了什么?

1 个答案:

答案 0 :(得分:0)

好的解决了,我忘了设置DataContext属性:

imgHolder.SetValue(TextBlock.DataContextProperty, List );