我在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文件夹中读取图像,则它会按预期工作。有什么想法吗?
答案 0 :(得分:2)
您无法直接访问Win8应用中的文件系统,因此您的图像路径(c:/users/christian/pictures/my_image.jpg)将无法在XAML中加载图像。
您最好的选择是使用ImageSource对您的类进行编码,并在图像文件名更改时将其加载到C#中。
答案 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:)