0

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

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 文件夹中读取的,则它会按预期工作。有任何想法吗?

4

2 回答 2

2

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

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

有关示例,请参见此处

于 2012-09-26T10:28:18.903 回答
1

正如 ZombieSheep (LOL) 所提到的,您无法像那样访问文件系统。将图像添加到(例如)项目中的 Assets 文件夹并像这样引用它:(图像称为 boot.jpg,View 中的元素称为 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 :)

于 2012-09-26T12:12:01.273 回答