我想修復由以前的同事編寫的更大的代碼塊 - 它是某種報告系統,輸出是一個包含數據的表。我的任務是在滾動時凍結列頂部的頂部。由於我是新來這個,我做了很簡單的表,找出如何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