2

我目前有一个数据网格,它可以根据服务器文件结构从我的数据库中获取结果。因此,我们创建 PDF 和 PPT,将它们加载到目录中,并相应地将它们添加到该数据库中。然后用户可以搜索他们需要的内容,结果会显示在我的数据网格中。有两列具有与该特定作品的每个 PDF 和 PPT 相关的图像超链接按钮。

然后,当用户单击 PDF 图标或 PPT 图标时,它会在另一个窗口中显示高分辨率片段。那里没有问题,但现在我想要它,以便当用户将鼠标悬停在图标上时,它会在 toptip 内显示高分辨率片段的预览。我可以将图像硬编码到工具提示中没有问题。因此,在这方面,我们创建了每个 PDF/PPT 的小缩略图预览图像。它们的大小都正确并准备就绪,我只需要将位置绑定到工具提示,以便它基本上显示每个高分辨率文档的“缩略图”预览。

这是我的 XAML:

<sdk:DataGridTemplateColumn x:Name="imageColPdf" Header="PDF" Width="SizeToHeader" IsReadOnly="False">
   <sdk:DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
               <HyperlinkButton HorizontalAlignment="Center" VerticalAlignment="Center" DataContext="{Binding Path=FileName}" Click="HyperlinkButtonPDF_Click" >
                     <Image Source="/PrintOnDemand;component/Images/16x16/page_white_acrobat.png" Stretch="None"  HorizontalAlignment="Center" ></Image>
                          <ToolTipService.ToolTip>
                              <ToolTip>
                                   <ToolTip.Content>
                                       <Image DataContext="{Binding Path=FileName}" Name="LoadPDFImage" Loaded="PDFImageToolTip"/>
                                   </ToolTip.Content>
                               </ToolTip>
                           </ToolTipService.ToolTip>
                       </HyperlinkButton>
                   </DataTemplate>
               </sdk:DataGridTemplateColumn.CellTemplate>
           </sdk:DataGridTemplateColumn>

然后这里是工具提示加载图像事件的代码隐藏:

private void PDFImageToolTip(object sender, RoutedEventArgs e)
    {

        string docname = ((System.Windows.FrameworkElement)((e.OriginalSource as Image).DataContext)).ToString();
        string baseUri = "http://localhost:51840/ShowDocument.aspx?DocumentName=" + docname + "&type=pdfjpg";
        var hostingWindow = HtmlPage.Window;
        hostingWindow.Navigate(new Uri(baseUri, UriKind.Absolute), "_blank");
    }

我在单击事件上执行此方法来调用高分辨率文档,但是当我尝试通过工具提示加载图像时,每次调试(System.NullReferenceException)并且对象引用未设置为实例时都会出错一个东西。似乎无法获得图像的正确文件名/源路径。每次在字符串 docname 上都会失败。好的,我的问题是,我怎样才能让它正确地通过并显示我们已经设置的图像。

4

1 回答 1

1

看起来您在调用 ToString() 之前将 DataContext 转换为 FrameworkElement,这是有意的吗?

string docname = ((System.Windows.FrameworkElement)((e.OriginalSource as Image).DataContext)).ToString();

此处理程序中的发件人也应该是您的 Image 实例。也许这会更好地为您服务:

String docname = ((FrameworkElement)sender).DataContext.ToString()

接下来,HyperLinkBut​​ton 上的 DataContext 绑定肯定对您没有任何帮助。您应该完全删除它。目前,绑定将在您的 FileName 字符串上查找 FileName 属性。

或者,从 Image 中删除 DataContext 绑定,它应该可以工作。

于 2012-07-30T22:25:16.200 回答