制作多个stackpanel的Image子

时间:2016-05-29 17:54:48

标签: c# wpf

我正在创建自定义文件选择器。为此,我需要一个Image对象供多个文件夹使用,我将其显示为StackPanel。

Image image = new Image();
image.Source = new BitmapImage(new Uri("I:/image.jpg"));

foreach(string s in Directory.GetDirectories("I:/"))
{
StackPanel sp = new StackPanel();
sp.Children.Add(image);
sp.Children.Add(new TextBlock{Text = s,});
}

这会引发InvalidOperationException,因为我无法将Image的单个实例添加到多个StackPanel。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

重用BitmapImage:

var bitmap = new BitmapImage(new Uri("I:/image.jpg"));

foreach (string s in Directory.GetDirectories("I:/"))
{
    var sp = new StackPanel();
    sp.Children.Add(new Image { Source = bitmap });
    sp.Children.Add(new TextBlock { Text = s });
}

除此之外,如果要将多个类似项添加到父控件,请考虑使用ItemsControl:

<ItemsControl ItemsSource="{Binding}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Image Source="I:\image.jpg"/>
                <TextBlock Text="{Binding}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

并填写如下:

public MainWindow()
{
    InitializeComponent();

    DataContext = Directory.EnumerateDirectories(@"I:\");
}