23

.NET 2.0 C# から来た WPF プログラミングの初心者です。

StackPanelデータベース内のテーブルからのデータで埋められるべき水平を作成しようとしています。問題は、下の表のテキストを含む画像を表示し、それらの 2 つの項目を水平に積み重ねたいことです。

私がやりたいことを表示するための擬似コードを次に示します。

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

これを行う方法がわかりません。

4

2 に答える 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 (またはその派生) が必要です。次に、アイテムパネルを設定して向きを変更できます(デフォルトでは垂直方向のVirtualizingStackPanelだと思います)ので、水平方向のVirtualizingStackPanelに設定するだけです。次に、各アイテムの ItemsTemplate を希望のレイアウト (データベースからバインドされたテキストの上に積み重ねられた画像) に設定できます。

于 2009-10-06T14:18:35.300 に答える
29

基本的に、オブジェクトの列挙を表示できるコントロールを使用します。これが可能なコントロールは、クラス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
于 2009-10-06T13:20:31.600 に答える