C# 工具提示内显示的Silverlight数据绑定图像
这个问题是这个问题的后续问题 这是我的新问题,我一直在尝试获取一个工具提示,以便在我的silverlight应用程序的搜索结果中返回的文档预览时弹出。我已经链接了图像,它显示了正确的图像,但是它会在一个新的或单独的窗口中打开,而不是工具提示本身。这是我的密码C# 工具提示内显示的Silverlight数据绑定图像,c#,asp.net,silverlight,tooltip,C#,Asp.net,Silverlight,Tooltip,这个问题是这个问题的后续问题 这是我的新问题,我一直在尝试获取一个工具提示,以便在我的silverlight应用程序的搜索结果中返回的文档预览时弹出。我已经链接了图像,它显示了正确的图像,但是它会在一个新的或单独的窗口中打开,而不是工具提示本身。这是我的密码 private void PPTImageToolTip(object sender, RoutedEventArgs e) { string docname = ((FrameworkElement)sender)
private void PPTImageToolTip(object sender, RoutedEventArgs e)
{
string docname = ((FrameworkElement)sender).DataContext.ToString();
string baseUri = "http://localhost:58904/ShowDocument.aspx?DocumentName=" + docname + "-ppt" + "&type=jpg";
var hostingWindow = HtmlPage.Window;
hostingWindow.Navigate(new Uri(baseUri, UriKind.Absolute), "_parent");
}
设置为转到处理此操作的my ShowDocument.aspx页面
else if (File.Exists(strFullFilePath) && sType == "jpg")
{
fileStream = new FileStream(strFullFilePath, FileMode.Open, FileAccess.Read);
buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, Convert.ToInt32(fileStream.Length));
try
{
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "image/jpeg";
Response.BinaryWrite(buffer);
}
catch (Exception ex)
{ }
}
我意识到它会转移到另一个“页面”,但我无法在工具提示中显示该图像或页面,而不是填充新窗口。这是因为我的HtmlPage.window代码吗?或者因为ShowDocument.aspx页面已被调用,无法回拨?是否有一个可行的解决方案,使图像填充到工具提示内?或者是否有方法将repsonse.redirect重定向到保存工具提示的silverlight控件中?如果您的目标是在工具提示中显示图像(而不是在html窗口中),则以下操作将起作用: 首先是web服务(ashx) 然后从Silverlight客户端调用服务:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
WebClient client = new WebClient();
client.OpenReadCompleted += (s, e) =>
{
using (Stream stream = e.Result)
{
BitmapImage img = new BitmapImage();
img.SetSource(stream);
// Update MyImage.Source. Use the Dispatcher to ensure this happens on the UI Thread
Dispatcher.BeginInvoke(() =>
{
MyImage.Source = img;
});
}
};
client.OpenReadAsync(new Uri(String.Format(BaseURL + "MyHandler.ashx")));
}
}
最后是视图的xaml:
<Border x:Name="MyBorder" Width="100" Height="100" Background="Black">
<ToolTipService.ToolTip>
<Image x:Name="MyImage" />
</ToolTipService.ToolTip>
</Border>
我将此标记为答案,因为它为我指明了正确的方向,但我对行//必须在UI线程部分设置MyImage.Source感到困惑?我需要为该部分做什么?如果您尝试设置MyImage.Source=img代码>如果不使用Dispatcher,您将获得一个跨线程访问异常。因此,除了示例之外,您不需要做任何事情,只需不删除Dispatcher位。我已经更新了我的答案来澄清这一点。好吧,我仔细研究了一下,最终发现了这一点,但我现在的主要问题是,我的“MyImage”嵌套在我的网格深处,后面的代码无法找到它,只能找到它所在的列。您可以从加载的事件处理程序中设置和调用WebClient。因此,使用WebClient而不是hostingWindow等。你需要的镜像实例是发送者。所以在尝试了几个场景后,我无法让它工作。我无法从代码隐藏中找到MyImage。调用时出现了一个奇怪的错误,关于lambda表达式?
<Border x:Name="MyBorder" Width="100" Height="100" Background="Black">
<ToolTipService.ToolTip>
<Image x:Name="MyImage" />
</ToolTipService.ToolTip>
</Border>