天天看點

WPF 實作ScrollViewer的垂直偏移滾動跳轉

原文: WPF 實作ScrollViewer的垂直偏移滾動跳轉

問題:考慮螢幕大小,一般都是會在表單問卷的頁面使用ScrollViewer。問卷中問題漏填漏選時,在送出時校驗不過,需要滾動跳轉至漏填漏選項。

頁面如下:

WPF 實作ScrollViewer的垂直偏移滾動跳轉
每個選項使用StackPanel,并對複選框和單選的勾選事件進行答案記錄,使用全局變量記錄

private readonly Dictionary<string, string> _dicAnswer = new Dictionary<string, string>();           

将所有選項使用StackPanel指定垂直樣式,思路是借用字典記錄每一題的答案,給題目編号記錄,答案為空,即未回答該問題。

在送出按鈕的click事件中添加如下代碼

var answer = _dicAnswer.First(_ => string.IsNullOrEmpty(_.Value));
            var title = answer.Key;
            double verticalOffset = 0;
            foreach (var child in QuestionsStackPanel.Children)
            {
                if (!(child is StackPanel sp))
                {
                    continue;
                }

                if (sp.Tag.ToString() != title)
                {
                    continue;
                }

                //擷取偏移量
                var vector = VisualTreeHelper.GetOffset(sp);

                verticalOffset = vector.Y;
                break;
            }
            //滾動到指定的垂直偏移位置
            QuestionsScrollViewer.ScrollToVerticalOffset(verticalOffset);