我在页面中有多个图像控件,我想要的是从图像列表动态更改它们的源,但我找不到相同的解决方案。
以下是我使用的代码,但我无法实现此功能。
<Image x:Name="image1" CacheMode="BitmapCache" Loaded="image_Loaded_1" Stretch="None" Source="/Assets/default-placeholder.png" />
<Image x:Name="image2" CacheMode="BitmapCache" Loaded="image_Loaded_2" Stretch="None" Source="/Assets/default-placeholder.png" />
<Image x:Name="image3" CacheMode="BitmapCache" Loaded="image_Loaded_3" Stretch="None" Source="/Assets/default-placeholder.png" />
这是一个.cs文件:
string imgname = "image";
int count = 1;
foreach(PictureItem img in e.ChosenPhotoList){
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(img.ImageStream);
Image i = new Image();
imgname = imgname + ""+count+"";
i.Name = imgname;
i.Source = bitmap;
//image1.Source = bitmap;
imgname = "image";
count++;
}
在上面的代码中,如果我直接使用图像控件名称来分配源,那么它工作正常,但我想要的是动态更改源名称并分别分配源。
如果这是一种错误的方法,并且还有其他方法可以实现该功能,请分享相同的内容。
答案 0 :(得分:0)
我看到三种可能的解决方案:
选项1
如果它总是三个图像(或其他一些预定义的数量),您可以将它们的源绑定到代码隐藏中的属性:
将页面设置为自己的DataContext
<Page
DataContext="{Binding RelativeSource={RelativeSource Self}}"
...
/>
在代码隐藏
中创建属性public string Image1 { get; set; }
public string Image2 { get; set; }
public string Image3 { get; set; }
然后在你的XAML中绑定它们
<Image x:Name="image1" CacheMode="BitmapCache" Loaded="image_Loaded_1" Stretch="None" Source="{Binding Image1}" />
<Image x:Name="image2" CacheMode="BitmapCache" Loaded="image_Loaded_2" Stretch="None" Source="{Binding Image2}" />
<Image x:Name="image3" CacheMode="BitmapCache" Loaded="image_Loaded_3" Stretch="None" Source="{Binding Image3}" />
选项2
如果要显示动态数量的图像,请将它们放入某种ListView或类似的列表控件中,并使用ItemsSource
属性迭代所有图像并更改其Source
属性
选项3
作为最后的手段,您可以尝试使用VisualTreeHelper。这个帮助程序允许您在运行时导航可视化树。它应该只作为最后的手段使用,它可能有点难以使用。您可以查看MSDN article了解详情。另请参阅VisualTreeHelper上的这个old, but relevant guide,了解它在实践中的工作原理。