WPF ListView项目仅在显示MessageBox后才被选中
我有一个奇怪的问题:我试图在WPF ListView中选择一个项目,如下所示:WPF ListView项目仅在显示MessageBox后才被选中,wpf,listview,Wpf,Listview,我有一个奇怪的问题:我试图在WPF ListView中选择一个项目,如下所示: int lineIndex = 123; scrollView.ScrollToVerticalOffset(lineIndex); myListView.SelectedIndex = lineIndex; int lineIndex = 123; scrollView.ScrollToVerticalOffset(lineIndex); MessageBox.Show("msg"); myListView.Se
int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
myListView.SelectedIndex = lineIndex;
int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
MessageBox.Show("msg");
myListView.SelectedIndex = lineIndex;
但由于某种原因,选择失败了。只有在select语句之前显示MessageBox时,选择才会起作用,如下所示:
int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
myListView.SelectedIndex = lineIndex;
int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
MessageBox.Show("msg");
myListView.SelectedIndex = lineIndex;
单击消息框上的
OK
按钮后,索引被选中。这是因为显示UI线程时,消息框会阻止它吗?如果是这样,如何在不显示消息框的情况下模拟此行为?正在使用您可用的SelectedItem属性,而不是在listview中使用scrollviewer?下面的代码演示如何选择列表中的第20项并滚动到其偏移量
<Window x:Class="testt.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:testt"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListView Name="myListView"/>
<Button Grid.Row="1" Height="40" Click="Button_Click">click</Button>
</Grid>
点击
以及背后的代码
using System.Windows;
namespace testt
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 100; i++)
myListView.Items.Add("A test item " + i.ToString());
}
private void Button_Click(object sender, RoutedEventArgs e)
{
int lineIndex = 20;
var item = myListView.Items[lineIndex];
myListView.ScrollIntoView(item);
myListView.SelectedItem = item;
}
}
}
使用System.Windows;
名称空间测试
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
对于(int i=0;i<100;i++)
添加(“一个测试项”+i.ToString());
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
int-lineIndex=20;
var item=myListView.Items[lineIndex];
myListView.ScrollIntoView(项目);
myListView.SelectedItem=项目;
}
}
}
我无法使用滚动视图
,因为我的ListView正在使用数据虚拟化。ListView的项是类的实例。这似乎是UI/工作线程的某种问题。因为当我显示消息框并单击OK
时,UI/worker线程将继续并正确选择项目。。