Xaml ItemsControl中的StackPanel:Netflix海报样式

Xaml ItemsControl中的StackPanel:Netflix海报样式,xaml,uwp-xaml,Xaml,Uwp Xaml,在放映电影海报时,我希望采用类似Netflix的布局: 类别 Poster1 Poster2 Poster3 第2类 Poster1 Poster2 Poster3 我想到了这个: <ItemsControl Name="dataControl" ItemsSource="{Binding}"> <ItemsControl.ItemTemplate> <DataTemplate> <

在放映电影海报时,我希望采用类似Netflix的布局:

类别 Poster1 Poster2 Poster3

第2类 Poster1 Poster2 Poster3

我想到了这个:

<ItemsControl Name="dataControl" ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Width="100" Height="50" FontSize="14" Text="{Binding Key}"></TextBlock>
                    <ItemsControl Name="dataControl" ItemsSource="{Binding Value}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Button Content="{Binding MovieName}" Width="100" Height="100"/>                                        
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
控件的绑定方式如下:

dataControl.ItemsSource = Source;

按照现在的代码方式,您告诉每个按钮位于其自身水平对齐的
StackPanel
内。您需要在一个水平
堆叠面板中包含所有按钮。试着做

<TextBlock Width="100" Height="50" FontSize="14" Text="{Binding Key}"></TextBlock>
<StackPanel Orientation="Horizontal">
    <ItemsControl Name="dataControl" ItemsSource="{Binding Value}">
         <ItemsControl.ItemTemplate>
              <DataTemplate>
                  <StackPanel Orientation="Horizontal">
                      <Button Content="{Binding MovieName}" Width="100" Height="100"/>                                        
                  </StackPanel>
              </DataTemplate>
         </ItemsControl.ItemTemplate>
     </ItemsControl>
</StackPanel>

按照当前代码的方式,您告诉每个按钮位于其自身水平对齐的堆栈面板内。您需要在一个水平
堆叠面板中包含所有按钮。试着做

<TextBlock Width="100" Height="50" FontSize="14" Text="{Binding Key}"></TextBlock>
<StackPanel Orientation="Horizontal">
    <ItemsControl Name="dataControl" ItemsSource="{Binding Value}">
         <ItemsControl.ItemTemplate>
              <DataTemplate>
                  <StackPanel Orientation="Horizontal">
                      <Button Content="{Binding MovieName}" Width="100" Height="100"/>                                        
                  </StackPanel>
              </DataTemplate>
         </ItemsControl.ItemTemplate>
     </ItemsControl>
</StackPanel>

要将“电影海报”水平对齐,您需要如下更改

<ItemsControl Name="dataControl" ItemsSource="{Binding Value}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding MovieName}" Width="100" Height="100"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

用于定义用于项目布局的面板。的默认值是指定的。对于,它默认设置为垂直。这就是您的项目垂直对齐的原因

下面的
StackPanel
控制每个项目内部的布局,而不是
ItemsControl
中项目的布局。因此,将其
方向设置为
水平方向将不起作用。由于每个项目只有一个
按钮
,您只需注释掉
堆栈面板

即可水平对齐“电影海报”,您需要如下更改

<ItemsControl Name="dataControl" ItemsSource="{Binding Value}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding MovieName}" Width="100" Height="100"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

用于定义用于项目布局的面板。的默认值是指定的。对于,它默认设置为垂直。这就是您的项目垂直对齐的原因


下面的
StackPanel
控制每个项目内部的布局,而不是
ItemsControl
中项目的布局。因此,将其
方向设置为
水平方向将不起作用。由于每个项目只有一个
按钮
,您可以只注释掉
堆栈面板

遗憾的是结果是一样的,我编辑了添加更多信息的问题。遗憾的是,结果是一样的,我编辑了添加更多信息的问题。我在中的回答可能会有所帮助,尽管它在WP8.1中,但概念是相似的。当存在大量数据时,您当前所做的将很困难,因为ItemsControl不支持虚拟化。我在中的回答可能会有所帮助,尽管它在WP8.1中,但概念类似。由于ItemsControl不支持虚拟化,因此当存在大量数据时,您当前所做的将很困难。