我使用 C# 和 XAML 为 Windows 8 制作了某种聊天应用程序。
对于聊天列表,我使用与 ObservableCollection 绑定的 ListView。对于我使用自定义控件的消息项,包含 RichTextBlock。
我想将 ListView 滚动到底部,以使新消息可见。我遇到的问题: ScrollIntoView方法不会使整个消息项可见,它仅使消息项的顶部可见。
所以,我也尝试了WinRT XAML Toolkit的解决方案:Get ListView's ScrollViewer and use ScrollViewer's methods
public static void ScrollToBottom(this ListView listView)
{
var scrollViewer = listView.GetFirstDescendantOfType<ScrollViewer>();
scrollViewer.ScrollToVerticalOffset(scrollViewer.ScrollableHeight);
}
和
public static void ScrollToBottom(this ListView listView)
{
var scrollViewer = listView.GetFirstDescendantOfType<ScrollViewer>();
scrollViewer.ScrollToVerticalOffset(scrollViewer.ExtentHeight);
}
具有相同的效果。某些消息项未完全滚动。
我还尝试在滚动之前进行延迟: new ManualResetEvent(false).WaitOne(2000);
我没有更多的想法如何制作可自动滚动的聊天列表。我怎么能做到这一点?
看来,什么 Windows 消息应用程序不使用 ListView (StackPanel??):
使用 StackPanel 会更容易吗?