如何在中断后连续滚动到scrollviewer MVVM的底部

时间:2017-09-26 14:38:19

标签: c# wpf xaml mvvm

我之前使用的附加属性是对this question的最高回应。我在一个文本块上使用它,它是后台进程的输出窗口。但是我注意到,当我在滚动查看器中向上滚动时,滚动查看器停止滚动到底部。

我无法弄清楚如何确保滚动查看器继续滚动到底部。请问你能否说明为什么会出现这种情况,或者如何在没有代码的情况下纠正这个问题。

1 个答案:

答案 0 :(得分:2)

您只需更改附加属性即可收听TextBlock Text所绑定的属性中的更改,因此每当更改ScrollViewer时,您都会滚动到底部。

用法:

<ScrollViewer HorizontalScrollBarVisibility="Auto" myApp:ScrollViewerAttachedProperties.ScrollToBottomOnChange="{Binding Logs}">
    <TextBlock Text="{Binding Path=Logs}" />
</ScrollViewer>

附属物:

public static class ScrollViewerAttachedProperties
{
    public static readonly DependencyProperty ScrollToBottomOnChangeProperty = DependencyProperty.RegisterAttached(
        "ScrollToBottomOnChange", typeof(object), typeof(ScrollViewerAttachedProperties), new PropertyMetadata(default(ScrollViewer), OnScrollToBottomOnChangeChanged));

    private static void OnScrollToBottomOnChangeChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
    {
        var scrollViewer = dependencyObject as ScrollViewer;
        scrollViewer?.ScrollToBottom();
    }

    public static void SetScrollToBottomOnChange(DependencyObject element, object value)
    {
        element.SetValue(ScrollToBottomOnChangeProperty, value);
    }

    public static object GetScrollToBottomOnChange(DependencyObject element)
    {
        return element.GetValue(ScrollToBottomOnChangeProperty);
    }
}