我使用C#和XAML为Windows 8制作了某种聊天应用程序。在Windows 8上滚动ListView的问题
对于聊天列表,我正在使用ListView绑定ObservableCollection。对于使用自定义控件的消息项目,包含RichTextBlock。
我想滚动ListView到底部,使新消息可见。 我遇到的问题: ScrollIntoView方法不会使整个消息项目可见,它只会使消息项目的顶部可见。
所以,我也尝试过的解决方案从WinRT XAML Toolkit: 获取ListView的ScrollViewer中和使用的ScrollViewer的方法
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这个?
的是动画新增ListView的元素呢?也就是说,他们看起来是全尺寸的,还是从小尺寸开始扩大到全尺寸,给用户一个视觉提示,他们被添加了?这可能可以解释为什么即使ScrollToBottom不起作用:您滚动到底部,但该项目还没有达到其最终高度,所以底部移动一点点,因为它完成动画。 –
@JoeWhite是的,动画出现在哪里。我曾尝试在调用滚动方法之前设置延迟2秒,但无论如何都没有成功。 – xVir