不同方向的GridView中的XAML GridView

不同方向的GridView中的XAML GridView,xaml,windows-runtime,windows-store-apps,Xaml,Windows Runtime,Windows Store Apps,(标题编辑) 如何使用XAML实现这一点? 水平宽度是固定的,必须可滚动 可能是GridView或其他控件,如ItemsControl或StackPanel 只有在需要垂直方向的元素时才使用列表视图,否则网格视图会显示所有需要的内容。它以水平方向显示项目 两者的大部分功能是相同的。只有在需要将元素垂直放置时才使用列表视图,否则网格视图将显示所有需要的内容。它以水平方向显示项目 两者的大部分功能是相同的。如果我正确理解您的需求,您可以使用两个单元格的网格。左边的单元格将是带有stackpanel的

(标题编辑)

如何使用XAML实现这一点? 水平宽度是固定的,必须可滚动

可能是GridView或其他控件,如ItemsControl或StackPanel


只有在需要垂直方向的元素时才使用列表视图,否则网格视图会显示所有需要的内容。它以水平方向显示项目


两者的大部分功能是相同的。

只有在需要将元素垂直放置时才使用列表视图,否则网格视图将显示所有需要的内容。它以水平方向显示项目


两者的大部分功能是相同的。

如果我正确理解您的需求,您可以使用两个单元格的网格。左边的单元格将是带有stackpanel的scrollviewer,第二个单元格将是带有垂直方向的wrappanel的scrollviewer

如果需要将数据绑定到某些itemssource,请将ItemsControl与自定义ItemsPanelTemplate-stackpanel、wrappanel、uniform grid、canvas或任何需要的面板一起使用

编辑:示例代码使用两个单元格,分别在其自己的scrollviewer中使用ListView和IntemsControl:

<ScrollViewer HorizontalScrollBarVisibility="Disabled">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <ListView x:Name="StudentsListView"  ItemsSource="{Binding Students}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Border Background="#484" Height="90"  Width="200">
                        <TextBlock Text="{Binding Name}" FontSize="24"  HorizontalAlignment="Center" VerticalAlignment="Center"  />
                    </Border>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" ZoomMode="Disabled">
            <ItemsControl ItemsSource="{Binding Students}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ItemsControl ItemsSource="{Binding Markings}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border Background="#888" Height="90" Width="90" Margin="5">
                                        <TextBlock Text="{Binding }" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center"  />
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>


    </Grid>
</ScrollViewer>

public class ViewModel
{
    public ViewModel()
    {
        Students = Enumerable.Range(0, 25)
            .Select(i => new Student
            {
                Name = "Student " + i,
                Markings = Enumerable.Range(1, 30).Select(j => (j + i) % 5 + 1).ToList()
            }).ToList();
    }

    public List<Student> Students { get; set; }
}

public class Student
{
    public string Name { get; set; }
    public List<int> Markings { get; set; }
}

公共类视图模型
{
公共视图模型()
{
学生=可枚举范围(0,25)
.选择(i=>new Student
{
Name=“Student”+i,
标记=可枚举。范围(1,30)。选择(j=>(j+i)%5+1)。ToList()
}).ToList();
}
公共列表学生{get;set;}
}
公立班学生
{
公共字符串名称{get;set;}
公共列表标记{get;set;}
}
结果是:


如果我正确理解您的要求,您可以使用两个单元格的网格。左边的单元格将是带有stackpanel的scrollviewer,第二个单元格将是带有垂直方向的wrappanel的scrollviewer

如果需要将数据绑定到某些itemssource,请将ItemsControl与自定义ItemsPanelTemplate-stackpanel、wrappanel、uniform grid、canvas或任何需要的面板一起使用

编辑:示例代码使用两个单元格,分别在其自己的scrollviewer中使用ListView和IntemsControl:

<ScrollViewer HorizontalScrollBarVisibility="Disabled">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <ListView x:Name="StudentsListView"  ItemsSource="{Binding Students}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Border Background="#484" Height="90"  Width="200">
                        <TextBlock Text="{Binding Name}" FontSize="24"  HorizontalAlignment="Center" VerticalAlignment="Center"  />
                    </Border>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" ZoomMode="Disabled">
            <ItemsControl ItemsSource="{Binding Students}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ItemsControl ItemsSource="{Binding Markings}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border Background="#888" Height="90" Width="90" Margin="5">
                                        <TextBlock Text="{Binding }" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center"  />
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>


    </Grid>
</ScrollViewer>

public class ViewModel
{
    public ViewModel()
    {
        Students = Enumerable.Range(0, 25)
            .Select(i => new Student
            {
                Name = "Student " + i,
                Markings = Enumerable.Range(1, 30).Select(j => (j + i) % 5 + 1).ToList()
            }).ToList();
    }

    public List<Student> Students { get; set; }
}

public class Student
{
    public string Name { get; set; }
    public List<int> Markings { get; set; }
}

公共类视图模型
{
公共视图模型()
{
学生=可枚举范围(0,25)
.选择(i=>new Student
{
Name=“Student”+i,
标记=可枚举。范围(1,30)。选择(j=>(j+i)%5+1)。ToList()
}).ToList();
}
公共列表学生{get;set;}
}
公立班学生
{
公共字符串名称{get;set;}
公共列表标记{get;set;}
}
结果是:


您可以通过将整行放入datatemplate并使用网格列设置宽度来实现这一点:

    <ListView Width="500" Height="500" ItemsSource="{Binding Data}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Item}" Grid.Column="0"/>
                    <ListView ItemsSource="{Binding SubItems}" Grid.Column="1"
                                ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                ScrollViewer.HorizontalScrollMode="Enabled"
                                SelectionMode="None">
                        <ListView.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel
                                    Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ListView.ItemsPanel>
                    </ListView>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

您可以通过将整行放入datatemplate并使用网格列设置宽度来实现这一点:

    <ListView Width="500" Height="500" ItemsSource="{Binding Data}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Item}" Grid.Column="0"/>
                    <ListView ItemsSource="{Binding SubItems}" Grid.Column="1"
                                ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                ScrollViewer.HorizontalScrollMode="Enabled"
                                SelectionMode="None">
                        <ListView.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel
                                    Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ListView.ItemsPanel>
                    </ListView>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

简单的工作示例:

我在“XAML输入和操作-高级概念”的第5个示例中找到了高级示例:

简单的工作示例:


我在“XAML输入和操作-高级概念”的第5个示例中找到了高级示例:

@Seema_Soam谢谢,但问题尚未解决。即使我使用GridView,我也找不到示例sample@Seema_Soam谢谢,但问题还没有解决。即使我使用GridView,我也找不到插图样本的示例是的,但是如果我想滚动第一个垂直stackpanel。。。第二个牢房呢?它会和第一个单元格一起滚动吗?v