簡體   English   中英

UWP 獲取Datagrid的ScrollViewer的垂直偏移量

[英]UWP get the vertical offset of Datagrid's ScrollViewer

我正在使用“Microsoft.Toolkit.Uwp.UI.Controls”中的數據網格,我試圖讓內置的 scrollViewer 能夠獲得垂直偏移並在一直滾動到時實現某些行為底部或中間。 到目前為止,我已經嘗試了許多在其他不同線程中找到的方法,例如下面的方法,它們掃描可視化樹並獲取 scrollViewer。 但是從此方法返回的 scrollViewer 的 verticalOffset 屬性的值始終為零,並且像 ViewChanged 這樣的事件永遠不會被觸發,我嘗試調用 updateLayout 方法,但它什么也沒改變。

我還嘗試將數據網格包裝在滾動查看器中並改用它。 雖然效果很好,但由於虛擬化,它導致了巨大的性能問題。 那么有什么解決方案嗎?

private ScrollViewer GetScrollViewer(UIElement element)
        {
            if (element == null) return null;

            ScrollViewer retour = null;
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element) && retour == null; i++)
            {
                if (VisualTreeHelper.GetChild(element, i) is ScrollViewer)
                {
                    retour = (ScrollViewer)(VisualTreeHelper.GetChild(element, i));
                }
                else
                {
                    retour = GetScrollViewer(VisualTreeHelper.GetChild(element, i) as UIElement);
                }
            }
            return retour;
        }

正如 Oleg Mikhailov 提到的源代碼,它不是用ScrollViewer實現的,我們已經用你的代碼進行了測試,我們無法獲取 scrollviewer 實例。 對於這種情況,您可以檢測垂直滾動條的值更改事件來獲取垂直偏移量,請參考以下代碼。

var scrollbar = MyFindDataGridChildOfType<ScrollBar>(MyDataGrid);
scrollbar.ValueChanged += Scroll_ValueChanged;
private void Scroll_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
    Debug.WriteLine(e.NewValue);
   // here is vertical value.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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