我想修复由以前的同事编写的更大的代码块 - 它是某种报告系统,输出是一个包含数据的表。我的任务是在滚动时冻结列顶部的顶部。由于我是新来这个,我做了很简单的表,找出如何DataGrid的作品:在没有ScrollViewer的情况下在StackPanel中垂直滚动
public MainWindow()
{
this.InitializeComponent();
var dt = new DataTable();
dt.Columns.Add("prvni");
dt.Columns.Add("druhy");
for (int i = 0; i < 100; i++)
{
var row = dt.NewRow();
row[0] = "A" + i;
row[1] = "B" + i;
dt.Rows.Add(row);
}
this.MainGrid.ItemsSource = dt.AsDataView();
}
通过大量的搜索,我发现了许多话题,其中建议摆脱的ScrollViewer的,因为冷冻的标题是在datagrid默认情况下。这是的代码原有的部分我修改:
var scrollViewer = new ScrollViewer()
{
HorizontalScrollBarVisibility = ScrollBarVisibility.Auto,
VerticalScrollBarVisibility = ScrollBarVisibility.Auto
};
scrollViewer.AddHandler(UIElement.MouseWheelEvent, new RoutedEventHandler(this.MouseWheelHandler), true);
var stackPanel = new StackPanel();
scrollViewer.Content = stackPanel;
...
return scrollViewer;
而在另一个函数,它被用来/称为:
var reportInfo = ((((sender as DataGrid).Parent as StackPanel).Parent as ScrollViewer).Parent as ReportOutputTabItem).Tag as ReportInfo;
嗯 - 我删除了ScrollViewer中,并返回它的StackPanel,然而 - 现在我无法滚动。当我搜索问题时,如何添加垂直滚动到StackPanel,答案是“添加ScrollViewer”。
所以 - 有没有办法,如何让列标题冻结在ScrollViewer中,或者如何启用垂直滚动StackPanel而不使用scrollViewer? (另一个可能的解决方案可能是缩短StackPanel的垂直大小,因为大部分页面都是结果页面,但仍然需要整页滚动页面)。
XAML部分:
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TabControl Name="MainTab" SelectionChanged="MainTabSelectionChanged" ItemTemplate="{StaticResource ClosableTabItemTemplate}"/>
<StackPanel Grid.Row="1" Name="NavigationPanel" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Height="23" Name="FirstButton" Width="40" Content="<<" Click="PageButtonClick" Opacity="0.75"/>
<Button Height="23" Name="PrevButton" Width="40" Click="PageButtonClick" Opacity="0.75" Content="<"/>
<Label Height="23" Name="PageNumberLabel" Width="70" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="1/1"/>
<Button Height="23" Name="NextButton" Width="40" Content=">" Click="PageButtonClick" Opacity="0.75"/>
<Button Height="23" Name="LastButton" Width="40" Click="PageButtonClick" Opacity="0.75" Content=">>"/>
</StackPanel>
在此先感谢。
取代取代你必须把DataGrid的一个StackPanel里面? DataGrid具有内置滚动支持,但由于StackPanel具有无限的垂直空间,因此无法在StackPanel中使用它。也许你可以向我们展示一些XAML? –
还要确保DataGrid未包含在滚动查看器中。 (DataGrid的默认模板实际上是一个荣耀的ScrollViewer) – Dtex
我放了一点XAML。它没有被包裹在scrollviewer那里,只是stackpanel。不过,有这些按钮包裹在堆叠面板中,所以我想我不能只是删除stackapnel以及 – Asheara