在Windows应用商店应用中使用CollectionViewSource时未显示项目图像

时间:2012-09-26 09:22:34

标签: xaml windows-8 windows-runtime

我在Visual Studio中基于Grid App XAML模板创建了一个Windows应用商店应用。它将GridView绑定到包含组的集合,其中每个组包含每个项目包含一些元数据和图像的项目。 CollectionViewSource用于在网格视图中显示组内的项目。一切正常。然后我添加了一个用于添加新项目的按钮,当单击该项目及其元数据时,会显示图像。单击事件处理程序:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    SampleDataGroup sampleDataGroup = SampleDataSource.GetGroup("Group-1");
    var sampleDataItem = new SampleDataItem("uniq", "Title", "Subtitle", "c:/users/christian/pictures/my_image.jpg", "Description", "Content", sampleDataGroup);
    sampleDataGroup.Items.Add(sampleDataItem);
}

但是,如果从项目的Assets文件夹而不是Pictures文件夹中读取图像,则它会按预期工作。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您无法直接访问Win8应用中的文件系统,因此您的图像路径(c:/users/christian/pictures/my_image.jpg)将无法在XAML中加载图像。

您最好的选择是使用ImageSource对您的类进行编码,并在图像文件名更改时将其加载到C#中。

See here for an example

答案 1 :(得分:1)

正如ZombieSheep(LOL)所说,你不能像这样访问文件系统。将图像添加到(例如)项目中的Assets文件夹中,并像这样引用它:(图像名为boot.jpg,图像视图中的元素称为MyImage)。使用collectionviewsource时,它是相同的,只需设置正确的路径(ms-appx:///或使用this.UriBase,或定义一个保存uri基本字符串的静态只读属性)。

希望这会有所帮助:)

 public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        SetImage();
    }

    private static readonly Uri _baseUri = new Uri("ms-appx:///");

    void SetImage()
    {
        MyImage.UriSource = new Uri(this.BaseUri, "Assets/boot.jpg");
        //MyImage.Source = new BitmapImage(new Uri("ms-appx:///Assets/boot.jpg"));
        //MyImage.Source = new BitmapImage(new Uri(_baseUri,"/Assets/boot.jpg"));
    }
}

你必须设置一个新的BitmapImage或在视图中定义BitmapImage并设置Uri:)