[英]Why does vertical scrollbar not allow scrolling?
我在網格邊框內包含的垂直堆棧面板中有一長串按鈕和標簽。 我的堆棧面板無法使用垂直滾動條。 所以我將它添加到包含堆棧面板的網格中,但滾動條無法滾動。 我究竟做錯了什么?
這是列表和滾動條的圖片。
這是代碼:
Grid.SetRow(leftPanelBorder, 1);
statsDrawGrid.Children.Add(leftPanelBorder);
Grid.SetRow(leftStackPanel, 1);
Grid.SetColumn(leftStackPanel, 0);
leftPanelBorder.Child = leftStackPanel;
//Draw the reservoir list
InitializeTheReservoirs();
DrawTheReservoirList(leftStackPanel, (string)byNameMenu.Header);
//Add a vertical scrollbar
ScrollViewer scrollBar = new ScrollViewer();
scrollBar.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
Grid.SetRow(scrollBar, 1);
Grid.SetColumn(scrollBar, 0);
statsDrawGrid.Children.Add(scrollBar);
statsDrawGrid.ShowGridLines = true;
statsWindow.Content = statsDrawGrid;
statsWindow.Show();```
這就是最終奏效的方法。 感謝@Nico Schertler!!
//Add a vertical scrollbar
ScrollViewer scrollBar = new ScrollViewer();
scrollBar.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
Grid.SetRow(scrollBar, 1);
Grid.SetColumn(scrollBar, 0);
statsDrawGrid.Children.Add(scrollBar);
//Draw the container/border
Border leftPanelBorder = new Border();
Grid.SetColumn(leftPanelBorder, 0);
Grid.SetRow(leftPanelBorder, 1);
scrollBar.Content = leftPanelBorder;
Grid.SetRow(leftStackPanel, 1);
Grid.SetColumn(leftStackPanel, 0);
leftPanelBorder.Child = leftStackPanel;
您應該在創建和填充左側堆棧面板之前添加滾動條:
Grid.SetRow(leftPanelBorder, 1);
statsDrawGrid.Children.Add(leftPanelBorder);
//Add a vertical scrollbar
ScrollViewer scrollBar = new ScrollViewer();
scrollBar.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
Grid.SetRow(scrollBar, 1);
Grid.SetColumn(scrollBar, 0);
statsDrawGrid.Children.Add(scrollBar);
Grid.SetRow(leftStackPanel, 1);
Grid.SetColumn(leftStackPanel, 0);
leftPanelBorder.Child = leftStackPanel;
//Draw the reservoir list
InitializeTheReservoirs();
DrawTheReservoirList(leftStackPanel, (string)byNameMenu.Header);
statsDrawGrid.ShowGridLines = true;
statsWindow.Content = statsDrawGrid;
statsWindow.Show();
您將ScrollViewer
添加到網格但它是空的,因此滾動條出現(由於強制可見性)但它沒有效果。
將StackPanel
移動到ScrollViewer
,而不是:
Grid.SetRow(leftPanelBorder, 1);
statsDrawGrid.Children.Add(leftPanelBorder);
Grid.SetRow(leftStackPanel, 1);
Grid.SetColumn(leftStackPanel, 0);
//leftPanelBorder.Child = leftStackPanel; <-- NOTE
//Draw the reservoir list
InitializeTheReservoirs();
DrawTheReservoirList(leftStackPanel, (string)byNameMenu.Header);
//Add a vertical scrollbar
ScrollViewer scrollBar = new ScrollViewer();
scrollBar.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
Grid.SetRow(scrollBar, 1);
Grid.SetColumn(scrollBar, 0);
statsDrawGrid.Children.Add(scrollBar);
scrollBar.Child = leftStackPanel; // <-- NOTE
statsDrawGrid.ShowGridLines = true;
statsWindow.Content = statsDrawGrid;
statsWindow.Show();
我沒有嘗試,但它應該工作。
作為建議,這種構建 UI 的分層組合的方式相當難以閱讀。 XAML 的主要目標是改進代碼的准備和編輯。
您幾乎可以通過 XAML 完成所有事情:很少有事情必須通過 C# 完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.