我正在创建自定义文件选择器。为此,我需要一个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。 有什么帮助吗?
答案 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:\");
}