0

リストボックスを使用して曲のリストを作成したいのですが、レイアウトに問題があります。

現在、次の xaml を使用しています。

<ListBox x:Name="lstHistory" HorizontalAlignment="Stretch" Margin="12,284,0,90" Width="460">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
                        <StackPanel Orientation="Horizontal">
                            <Image Margin="5" VerticalAlignment="top" Source="{Binding Image}" />
                        </StackPanel>
                        <StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                            <TextBlock Margin="8"
                                  TextWrapping="Wrap"
                                  VerticalAlignment="Top"
                                  HorizontalAlignment="Left"
                                  Text="{Binding Name}" />
                            <TextBlock Margin="8"
                                  VerticalAlignment="Top"
                                  HorizontalAlignment="Left"
                                  Text="{Binding Artist}" />
                            <TextBlock Margin="8,0,8,8"
                                  VerticalAlignment="Bottom"
                                  HorizontalAlignment="Right" Text="{Binding Time}" Opacity="0.25" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

リスト項目の右下隅に時間を表示したいのですが、毎回画面の中央に表示されてしまいます。

これは私が得るものの例です: ここに画像の説明を入力

誰かがそこに時間を取得する方法を教えてもらえますか?

4

2 に答える 2

5

デフォルトでは、ListBoxItem は可能な限り小さなスペースを占有します。これは StackPanel にも当てはまります。スパンするには、ListBox の Horizo​​ntalContentAlignment を Stretch に設定し、StackPanel の Horizo​​ntalAlignment を Stretch に設定する必要があります (これは既に行っています)。ListBox の ItemContainerStyle も設定する必要があります。

<ListBox x:Name="lstHistory" HorizontalContentAlignment="Stretch" Margin="12,284,0,90">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
                    <Image Margin="5" VerticalAlignment="top" Source="{Binding Image}" />
                    <StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <TextBlock Margin="8"
                              TextWrapping="Wrap"
                              VerticalAlignment="Top"
                              HorizontalAlignment="Left"
                              Text="{Binding Name}" />
                        <TextBlock Margin="8"
                              VerticalAlignment="Top"
                              HorizontalAlignment="Left"
                              Text="{Binding Artist}" />
                        <TextBlock Margin="8,0,8,8"
                              VerticalAlignment="Bottom"
                              HorizontalAlignment="Right" Text="{Binding Time}" Opacity="0.25" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
于 2012-05-17T19:24:03.770 に答える
0

HorizontalAlignment="Stretch"StackPanel では機能しません。代わりに、明示的な Width (おそらく 432) を設定する必要があります。

また、Image は単独で StackPanel にある必要はありません。

于 2012-05-17T18:57:25.017 に答える