簡體   English   中英

為什么垂直滾動條不允許滾動?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM