动态更改图像控件的名称

时间:2015-07-15 16:56:20

标签: c# windows-phone-8 windows-phone windows-phone-8.1

我在页面中有多个图像控件,我想要的是从图像列表动态更改它们的源,但我找不到相同的解决方案。

以下是我使用的代码,但我无法实现此功能。

<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++;
        }

在上面的代码中,如果我直接使用图像控件名称来分配源,那么它工作正常,但我想要的是动态更改源名称并分别分配源。

如果这是一种错误的方法,并且还有其他方法可以实现该功能,请分享相同的内容。

1 个答案:

答案 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,了解它在实践中的工作原理。