0

这个问题是这个问题的后续。来自数据网格工具提示的silverlight 4图像预览

这是我的新问题,我一直在尝试获取一个工具提示,以弹出在我的 silverlight 应用程序的搜索结果中返回的文档的预览。我已经链接了图像,它提供了正确的图像,但是它在一个新的或单独的窗口中打开,而不是工具提示本身。这是我背后的代码..

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");
    }

这设置为转到处理此操作的我的 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 控件?

4

1 回答 1

1

如果您的目标是在工具提示内(而不是在 html 窗口中)显示图像,则以下内容将起作用:

首先是网络服务(ashx)

public class MyHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        String fileName = @"c:\PathToMyFile\Myfile.jpg";
        using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
        {
            var buffer = new byte[fileStream.Length];
            fileStream.Read(buffer, 0, Convert.ToInt32(fileStream.Length));
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite(buffer);
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

然后从 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>
于 2012-07-31T20:04:54.963 回答