gpt4 book ai didi

c# - 如何自动滚动 ScrollViewer - 仅当用户未更改滚动位置时

转载 作者:IT王子 更新时间:2023-10-29 04:10:04 28 4
gpt4 key购买 nike

我想在包装 ContentControlScrollViewer 中创建以下行为:
ContentControl 高度增长时,ScrollViewer 应该自动滚动到末尾。使用 ScrollViewer.ScrollToEnd() 很容易实现这一点。
但是,如果用户使用滚动条,自动滚动就不会再发生了。例如,这类似于 VS 输出窗口中发生的情况。

问题是要知道何时由于用户滚动而发生滚动,以及何时因内容大小发生变化而发生滚动。我尝试使用 ScrollChangedEventScrollChangedEventArgs,但无法正常工作。

理想情况下,我不想处理所有可能的鼠标和键盘事件。

最佳答案

您可以使用 ScrollChangedEventArgs.ExtentHeightChange 来了解 ScrollChanged 是由于内容更改还是用户操作引起的...当内容不变时,ScrollBar 位置设置或取消设置自动滚动模式。当内容发生变化时,您可以应用自动滚动。

代码隐藏:

    private Boolean AutoScroll = true;

private void ScrollViewer_ScrollChanged(Object sender, ScrollChangedEventArgs e)
{
// User scroll event : set or unset auto-scroll mode
if (e.ExtentHeightChange == 0)
{ // Content unchanged : user scroll event
if (ScrollViewer.VerticalOffset == ScrollViewer.ScrollableHeight)
{ // Scroll bar is in bottom
// Set auto-scroll mode
AutoScroll = true;
}
else
{ // Scroll bar isn't in bottom
// Unset auto-scroll mode
AutoScroll = false;
}
}

// Content scroll event : auto-scroll eventually
if (AutoScroll && e.ExtentHeightChange != 0)
{ // Content changed and auto-scroll mode set
// Autoscroll
ScrollViewer.ScrollToVerticalOffset(ScrollViewer.ExtentHeight);
}
}

关于c# - 如何自动滚动 ScrollViewer - 仅当用户未更改滚动位置时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2984803/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com