我之前使用的附加属性是对this question的最高回应。我在一个文本块上使用它,它是后台进程的输出窗口。但是我注意到,当我在滚动查看器中向上滚动时,滚动查看器停止滚动到底部。
我无法弄清楚如何确保滚动查看器继续滚动到底部。请问你能否说明为什么会出现这种情况,或者如何在没有代码的情况下纠正这个问题。
答案 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);
}
}