6

我正在尝试使用SearchBoxWindows 8.1 中引入的控件,但我无法弄清楚如何在结果建议中显示图像。出现建议,但图像应保留的空间保持空白:

在此处输入图像描述

这是我的 XAML:

<SearchBox SuggestionsRequested="SearchBox_SuggestionsRequested" />

而我背后的代码:

    private async void SearchBox_SuggestionsRequested(SearchBox sender, SearchBoxSuggestionsRequestedEventArgs args)
    {
        var deferral = args.Request.GetDeferral();
        try
        {
            var imageUri = new Uri("ms-appx:///test.png");
            var imageRef = await StorageFile.GetFileFromApplicationUriAsync(imageUri);
            args.Request.SearchSuggestionCollection.AppendQuerySuggestion("test");
            args.Request.SearchSuggestionCollection.AppendSearchSeparator("Foo Bar");
            args.Request.SearchSuggestionCollection.AppendResultSuggestion("foo", "Details", "foo", imageRef, "Result");
            args.Request.SearchSuggestionCollection.AppendResultSuggestion("bar", "Details", "bar", imageRef, "Result");
            args.Request.SearchSuggestionCollection.AppendResultSuggestion("baz", "Details", "baz", imageRef, "Result");
        }
        finally
        {
            deferral.Complete();
        }
    }

我错过了什么吗?


一些额外的细节:

我尝试使用 XAML Spy 对其进行调试;每个建议ListViewItemContent设置为Windows.ApplicationModel.Search.Core.SearchSuggestion. 在这些SearchSuggestion对象上,我注意到TextTagDetailTextImageAlternateText属性设置为正确的值,但Image属性为空...


编辑:所以显然AppendResultSuggestion只接受一个实例RandomAccessStreamReference,而不是任何其他实现IRandomAccessStreamReference。我认为这是一个错误,因为它与方法签名所传达的内容不一致。我在 Connect 上提交了它,如果你想修复它,请投票给它!

4

1 回答 1

5

AppendResultSuggestion调用 a的签名IRandomAccessStreamReference

public void AppendResultSuggestion(
    string text, string detailText, string tag, 
    IRandomAccessStreamReference image, 
    string imageAlternateText)

你可以得到它,如果你已经有一个StorageFile(你有)使用CreateFromFile

RandomAccessStreamReference.CreateFromFile(IStorageFile file)

但是由于您从 URI 开始,您不妨跳过额外的步骤并使用CreateFromUri

RandomAccessStreamReference.CreateFromUri(Uri uri)

所以你会有类似的东西:

var imageUri = new Uri("ms-appx:///test.png");
var imageRef = RandomAccessStreamReference.CreateFromUri(imageUri);
args.Request.SearchSuggestionCollection.AppendResultSuggestion("foo", "Details", "foo", imageRef, "Result")
于 2013-11-04T17:11:13.457 回答