C# WPF-包装/网格中的ItemControl数据绑定
我想从我自己的数据类型中读取图像,并通过ItemControl绑定将列表同步到Grid/WrapPanel 我的XAML:C# WPF-包装/网格中的ItemControl数据绑定,c#,.net,wpf,xaml,data-binding,C#,.net,Wpf,Xaml,Data Binding,我想从我自己的数据类型中读取图像,并通过ItemControl绑定将列表同步到Grid/WrapPanel 我的XAML: <WrapPanel > <ItemsControl Name="images"> <ItemsControl.ItemTemplate> <DataTemplate> <Image Source="{Binding Link}"
<WrapPanel >
<ItemsControl Name="images">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Link}" Stretch="None" ></Image>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</WrapPanel>
C#代码:
public主窗口()
{
初始化组件();
列表项=新列表();
添加(新电影(){Name=“Movie1”,Link=”http://www.airvana.com/default/cache/file/1601D22D-9266-DE31-D6B8D178DB2933DC_small.png,列=0});
添加(新电影(){Name=“Movie2”,Link=”http://www.airvana.com/default/cache/file/1601D22D-9266-DE31-D6B8D178DB2933DC_small.png"});
添加(新电影(){Name=“Movie2”,Link=”http://www.airvana.com/default/cache/file/1601D22D-9266-DE31-D6B8D178DB2933DC_small.png"});
//添加(新电影(){Name=“Movie3”});
images.ItemsSource=项目;
}
}
公映
{
公共字符串名称{get;set;}
公共字符串链接{get;set;}
}
这一切都非常好,唯一的问题是(为什么我尝试WrapPanel而不是网格)所有3个图像都在彼此下方,而不是相邻
如果我不使用绑定,只使用一个包装器并添加3个图像,那么效果会非常好
基本上我想做的是一组图片,比如拼贴画,有没有更好的方法
ItemsPanelTemplate,定义用于项目布局的面板ItemsControl的默认值是指定StackPanel的ItemsPanelTemplate
在WrapPanel
中包装一堆垂直堆叠的图像不会使它们水平。您需要将布局更改为:
<ItemsControl Name="images" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Link}" Stretch="None" ></Image>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
非常感谢,这非常有效!但是,我不能说我完全理解您所做的更改(我对WPF和XAML非常陌生),特别是关闭第一个ItemsControl.ItemTemplate后的部分。基本上,ItemsControl
会像您已经看到的那样垂直堆叠项。这种行为是由于它的ItemsPanel
描述了项目的排列方式。通过将itsItemsPanel
替换为WrapPanel
,我们已将此类行为更改为所需的方向。感谢您向我解释:)
<ItemsControl Name="images" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Link}" Stretch="None" ></Image>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>