WPF数据绑定stackpanel

时间:2009-10-06 13:06:24

标签: c# wpf data-binding stackpanel

我是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 个答案:

答案 0 :(得分:30)

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(或某些派生)来绑定你的源代码。然后你可以通过设置它的项目面板来改变方向(我相信默认情况下是一个具有垂直方向的VirtualizingStackPanel),所以只需将其设置为具有水平方向的VirtualizingStackPanel。然后,您可以将每个项目的ItemsTemplate设置为您想要的布局(图像堆叠在从数据库绑定的文本顶部)。

答案 1 :(得分:25)

基本上,您希望使用能够显示对象枚举的控件。具有此功能的控件是类ItemsControl及其所有后代(SelectorListBoxListView等。

将此控件的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