我正在寻找的基本上是常规的控制台行为。它开始在顶部添加文本,当窗口填满时,它会自动开始滚动以保持最近添加的行。
我遇到的问题是ScrollToBottom
上的ListView
获取 n 最后的项目(其中n是多少适合的项目),但随后对齐物品位于对照顶部,底部留有间隙。
添加以下内容可以部分解决:
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel VerticalAlignment="Bottom"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
正确保持最后一项与底部对齐。直到我调用ScrollToBottom(然后再次出现间隙)。
以下是我能提出的最小代码片段,但仍显示此行为。
MainWindow.xaml
<Window x:Class="ScrollToBottomTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="200">
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Background="Gray"/>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
</Window>
MainWindow.xaml.cs
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace ScrollToBottomTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
new Thread(() =>
{
while (true)
{
Application.Current.Dispatcher.Invoke(() =>
{
listView.Items.Add("abc");
ScrollToBottom();
});
Thread.Sleep(250);
}
})
{ IsBackground = true }.Start();
}
private void ScrollToBottom()
{
if (VisualTreeHelper.GetChildrenCount(listView) > 0)
{
Border border = (Border)VisualTreeHelper.GetChild(listView, 0);
ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
scrollViewer.ScrollToBottom();
}
}
}
}
我会非常感谢任何提示。
答案 0 :(得分:0)
创建ListViewItem,然后添加它,然后在项目上调用BringIntoView。