-1

我有 20 张图片,它们是 ball1、ball2、...、ball20。

据说,我使用

Image x:Name="ball1" Source="/Images/ball1.png" Canvas.Left="150" Canvas.Top="200"在 .xaml 中。

目前,我尝试以这种方式插入它

Uri uri = new Uri("/Images/ball1.png", UriKind.Relative);
ImageSource img = new System.Windows.Media.Imaging.BitmapImage(uri);
image.SetValue(Image.SourceProperty, img);
cv.Children.Add(image);

但是,我不能以这种方式使用它,因为它没有指定我要插入它的位置。

我想避免通过 .xaml 执行此操作,如何使用 .cs 中的数组来执行此操作?

4

2 回答 2

0

您可以Image在 XAML 中声明对象,然后Source根据您的喜好从您的代码或视图模型中更新属性。对于此方法,您的视图模型或后面的代码中的每个图像都需要一个属性:

public string Image1SourcePath
{
    get { return image1SourcePath; }
    set { image1SourcePath = value; NotifyPropertyChanged("Image1SourcePath"); }
}
...
public string Image20SourcePath
{
    get { return image20SourcePath; }
    set { image20SourcePath = value; NotifyPropertyChanged("Image20SourcePath"); }
}

确保实现某种形式的INotifyPropertyChanged接口

<Image Source="{Binding Image1SourcePath}" Canvas.Left="150" Canvas.Top="200" />
...
<Image Source="{Binding Image20SourcePath}" Canvas.Left="1500" Canvas.Top="200" />

然后在您的视图模型或代码后面:

Image1SourcePath = "/YourApplicationName;component/Images/ball1.png";
...
Image20SourcePath = "/YourApplicationName;component/Images/ball20.png";

这是很多代码,但它允许您Image.Source从后面的代码更新属性并在 XAML 中设置位置。

于 2013-07-25T11:38:32.357 回答
0

您可以通过在设置附加属性(Canvas.Left 和 Canvas.Top)的 Canvas 类上调用适当的静态方法来完成此操作。

Uri uri = new Uri("/Images/ball1.png", UriKind.Relative);
ImageSource img = new System.Windows.Media.Imaging.BitmapImage(uri);
image.SetValue(Image.SourceProperty, img);
cv.Children.Add(image);

// Position the image on the canvas
Canvas.SetLeft(150);
Canvas.SetTop(200);

如果您有要显示的图像列表,您可以执行以下操作:

        List<Uri> imageUris = new List<Uri>() 
        { 
            new Uri(@"C:\Users\Grant\Pictures\Heron_zoomed.png"),
            new Uri(@"C:\Users\Grant\Pictures\bridge.jpg") 
        };

        int left = 20;
        int top = 10;

        foreach (var uri in imageUris)
        {
            Image image = new Image { Source = new BitmapImage(uri) };
            Canvas.SetLeft(image, left);
            Canvas.SetTop(image, top);
            MainCanvas.Children.Add(image);

            left += 400;
        }

上面的代码假定您的窗口 xaml 中有类似以下内容,并且 imageUris 列表中的文件名存在。

<Grid>
    <Canvas x:Name="MainCanvas">

    </Canvas>
</Grid>

我不知道你想用这些图像做什么。如果您只想在网格中显示它们,您可以使用 WPF 集合控件之一来执行此操作而无需任何代码。

一种方法是使用 WPF 在网格中显示图像

我怀疑有更好的选择,但这将是一个开始。

于 2013-07-25T11:48:00.517 回答