WPF数据绑定StackPanel

24

我是一位WPF编程的初学者,来自.NET 2.0 C#。

我正在尝试创建一个横向的StackPanel,它应该填充来自数据库表的数据。问题是我想要显示一个带有表格下方一些文本的图像,然后将这两个项目水平排列在一起。

以下是一些伪代码,以显示我想做的事情:

<StackPanel Orientation="horizontal" ItemsSource="{Binding Path=myTable}">
    <StackPanel>
        <Image Source="User.png"/>
        <Label HorizontalAlignment="Center" Content="{Binding Path=UserName}"></Label>
    </StackPanel>
</StackPanel>

我简直无法弄清楚如何做到这一点。

2个回答

34

尽管从你的书面描述来看,Julien的回答是正确的,但是根据你提供的XAML代码,似乎你正在寻找以下内容:

<DataTemplate x:Key="UserDataTemplate">
    <StackPanel>
        <Image Source="User.png"/>
        <Label HorizontalAlignment="Center" Content="{Binding Path=UserName}" />
    </StackPanel>
</DataTemplate>

<ItemsControl x:Name="UserList" ItemTemplate="{StaticResource UserDataTemplate}" >
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

你绝对需要一个ItemsControl(或其某种派生形式)来绑定你的数据源。然后,你可以通过设置它的items panel(我相信默认情况下是带有垂直方向的VirtualizingStackPanel)来改变方向,只需将其设置为具有水平方向的VirtualizingStackPanel。接下来,你可以为每个项设置ItemsTemplate以获得所需的布局(图片叠在从数据库绑定的文本上面)。


谢谢你们两个,你们的例子正是我所需要的! - Kaare
2
这应该是每一本XAML书籍/教程的第一课。 - srock

29

你需要使用一个能够显示对象的枚举的控件。 能够实现这一点的控件是类ItemsControl及其所有后代(Selector, ListBox, ListView等)。

将此控件的ItemsSource属性绑定到要使用的对象列表,例如从数据库中提取的用户列表。 将控件的ItemTemplate设置为用于显示列表中每个项目的DataTemplate

示例代码:

Resources节(例如Window.Resources)中:

<DataTemplate x:Key="UserDataTemplate">
  <StackPanel Orientation="Horizontal">
    <Image Source="User.png"/>
    <Label HorizontalAlignment="Center" Content="{Binding Path=UserName}" />
  </StackPanel>
</DataTemplate>
在您的 Window / Page / UserControl 中:
<ItemsControl x:Name="UserList" ItemTemplate="{StaticResource UserDataTemplate}" />

在你的代码后台:

UserList.ItemsSource = ... // here, an enumeration of your Users, fetched from your db

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接