【发布时间】:2012-07-28 09:53:11
【问题描述】:
我目前有一个数据网格,它可以根据服务器文件结构从我的数据库中获取结果。因此,我们创建 PDF 和 PPT,将它们加载到目录中,并相应地将它们添加到该数据库中。然后用户可以搜索他们需要的内容,结果会显示在我的数据网格中。有两列具有与该特定作品的每个 PDF 和 PPT 相关的图像超链接按钮。
然后,当用户单击 PDF 图标或 PPT 图标时,它会在另一个窗口中显示高分辨率片段。那里没有问题,但现在我想要它,以便当用户将鼠标悬停在图标上时,它会在 tooptip 内显示高分辨率片段的预览。我可以将图像硬编码到工具提示中没有问题。因此,在这方面,我们创建了每个 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 上都会失败。好的,我的问题是,我怎样才能让它正确地通过并显示我们已经设置的图像。
【问题讨论】:
-
OriginalSource 始终是图像吗?可以改用 sender 的 DataContext 吗?
-
有人告诉我,上面的代码隐藏应该可以工作,即使它创建了一个新窗口,通过 tooptip 显示也不重要
-
您是因为 DataContext 为 null 还是因为 e.OriginalSource 无法转换为 Image 而收到异常?
-
@Frobzig 是的,它始终是一个图像,我想我尝试过并提出了同样的错误,system.nullreferenceexception
-
是的,datacontext 恢复为 null,或者当我在快速查看 OriginalSource 时,它说它为 null,不会再继续了
标签: c# silverlight xaml datagrid tooltip