我是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>
我根本无法想象如何做到这一点。
答案 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
及其所有后代(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