XAML/C 中 headers 的 GridView#
A GridView with headers in XAML/C#
我正在尝试为 Windows 通用应用程序创建网格视图。
理想情况下,我想要一个可以水平和垂直滚动的 grid-type 视图,但在滚动时无论用户在数据中移动到哪里,第一行和第一列都始终可见(示例:冻结 Excel 中的窗格)。
我不确定是否应该继续使用 Grid、切换到 GridView 或使用多个 ListView 来模拟一个网格。通用 Windows 样本似乎有我正在寻找的 header ,当滚动(一个简单的组)时 Grid/ListView,它们不会消失,但他们没有似乎具有在一个视图滚动时让所有视图滚动的能力。
有什么想法吗?我也尝试过对第一列(该列是 ListView)使用 SplitPane 控件,但我仍然遇到同样的同时滚动问题。
这是你想要的吗?
XAML:
<Grid Width="500" Height="500">
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="400" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="400" />
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Row="0" Grid.Column="1" x:Name="top" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<Grid Background="Green" Width="1000">
<Line X1="0" X2="1000" Y1="0" Y2="100" Stroke="Black" StrokeThickness="5"/>
</Grid>
</ScrollViewer>
<ScrollViewer Grid.Row="1" Grid.Column="0" x:Name="left" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<Grid Background="Red" Height="1000">
<Line X1="0" X2="100" Y1="0" Y2="1000" Stroke="Black" StrokeThickness="5"/>
</Grid>
</ScrollViewer>
<ScrollViewer Grid.Row="1" Grid.Column="1" x:Name="middle" ViewChanged="middle_ViewChanged" Background="Blue" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
<Grid Background="Blue" Height="1000" Width="1000">
<Line X1="0" X2="1000" Y1="0" Y2="1000" Stroke="Black" StrokeThickness="5"/>
</Grid>
</ScrollViewer>
</Grid>
后面的代码:
private void middle_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
top.ChangeView(middle.HorizontalOffset, null, null, true);
left.ChangeView(null, middle.VerticalOffset, null, true);
}
您可以在这些 ScrollViewer 中放置任何您想要的内容,这些行只是为了让滚动与什么同步滚动变得显而易见。
我正在尝试为 Windows 通用应用程序创建网格视图。
理想情况下,我想要一个可以水平和垂直滚动的 grid-type 视图,但在滚动时无论用户在数据中移动到哪里,第一行和第一列都始终可见(示例:冻结 Excel 中的窗格)。
我不确定是否应该继续使用 Grid、切换到 GridView 或使用多个 ListView 来模拟一个网格。通用 Windows 样本似乎有我正在寻找的 header ,当滚动(一个简单的组)时 Grid/ListView,它们不会消失,但他们没有似乎具有在一个视图滚动时让所有视图滚动的能力。
有什么想法吗?我也尝试过对第一列(该列是 ListView)使用 SplitPane 控件,但我仍然遇到同样的同时滚动问题。
这是你想要的吗?
XAML:
<Grid Width="500" Height="500">
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="400" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="400" />
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Row="0" Grid.Column="1" x:Name="top" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<Grid Background="Green" Width="1000">
<Line X1="0" X2="1000" Y1="0" Y2="100" Stroke="Black" StrokeThickness="5"/>
</Grid>
</ScrollViewer>
<ScrollViewer Grid.Row="1" Grid.Column="0" x:Name="left" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<Grid Background="Red" Height="1000">
<Line X1="0" X2="100" Y1="0" Y2="1000" Stroke="Black" StrokeThickness="5"/>
</Grid>
</ScrollViewer>
<ScrollViewer Grid.Row="1" Grid.Column="1" x:Name="middle" ViewChanged="middle_ViewChanged" Background="Blue" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
<Grid Background="Blue" Height="1000" Width="1000">
<Line X1="0" X2="1000" Y1="0" Y2="1000" Stroke="Black" StrokeThickness="5"/>
</Grid>
</ScrollViewer>
</Grid>
后面的代码:
private void middle_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
top.ChangeView(middle.HorizontalOffset, null, null, true);
left.ChangeView(null, middle.VerticalOffset, null, true);
}
您可以在这些 ScrollViewer 中放置任何您想要的内容,这些行只是为了让滚动与什么同步滚动变得显而易见。