C# WPF列表框自动滚动停止工作
我正在为控制台应用程序创建GUI,并希望输出显示在列表框中。 如果我在文本框中键入“time”并单击显示“Send”的按钮,则命令将发送到控制台应用程序。问题在于,发送命令时,列表框会自动停止向下滚动。我是否做了错误的事情,或者是否有其他处理自动滚动的方法 当应用程序加载时,它会正确滚动 应用程序加载后,滚动停止工作 在应用程序获得命令后,它会向listbox添加一个项,这会导致AutoScroll方法运行,但即使代码执行,listbox也不会向下滚动。我尝试在发送命令后添加对AutoScroll的调用,但这也不起作用C# WPF列表框自动滚动停止工作,c#,wpf,listbox,C#,Wpf,Listbox,我正在为控制台应用程序创建GUI,并希望输出显示在列表框中。 如果我在文本框中键入“time”并单击显示“Send”的按钮,则命令将发送到控制台应用程序。问题在于,发送命令时,列表框会自动停止向下滚动。我是否做了错误的事情,或者是否有其他处理自动滚动的方法 当应用程序加载时,它会正确滚动 应用程序加载后,滚动停止工作 在应用程序获得命令后,它会向listbox添加一个项,这会导致AutoScroll方法运行,但即使代码执行,listbox也不会向下滚动。我尝试在发送命令后添加对AutoScr
private void btnStart_Click(object sender, RoutedEventArgs e)
{
server = new Server();
string ExecPath = @"Server.exe";
string ConfPath = @"serverconfig.txt";
//Starts the process and passes the config cmd-line argument
//redirects output and input, and prevents a cmd window from being created
server.Start(ExecPath, ConfPath);
server.SrvProcess.OutputDataReceived += SrvProcess_OutputDataReceived;
server.SrvProcess.BeginOutputReadLine();
}
private void btnSend_Click(object sender, RoutedEventArgs e)
{
int itemCount = lstOutput.Items.Count;
if (!String.IsNullOrEmpty(txtCmd.Text))
{
if (lstOutput.Items[itemCount - 1].ToString() != String.Empty)
lstOutput.Items.Add(String.Empty);
lstOutput.Items.Add(": " + txtCmd.Text);
server.SrvProcess.StandardInput.WriteLine(txtCmd.Text);
}
}
void SrvProcess_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
if (!closing)
{
lstOutput.Dispatcher.Invoke(() => AddItem(e.Data));
lstOutput.Dispatcher.InvokeAsync(() => AutoScroll());
}
}
void AddItem(string Data)
{
lstOutput.Items.Add(Data);
if (Data == "Server started")
{
lstOutput.Items.Clear();
}
}
void AutoScroll()
{
int itemCount = lstOutput.Items.Count - 1;
if (itemCount > -1)
lstOutput.ScrollIntoView(lstOutput.Items[itemCount]);
}
ScrollIntoView显示为使用行的文本来确定滚动的位置。通过添加时间戳使每一行都唯一,滚动将正常工作