C# WPF-包装/网格中的ItemControl数据绑定

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}"

我想从我自己的数据类型中读取图像,并通过ItemControl绑定将列表同步到Grid/WrapPanel

我的XAML:

    <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
描述了项目的排列方式。通过将its
ItemsPanel
替换为
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>