我有一个奇怪的问题:我试图在WPF ListView中选择一个项目,如下所示:
<video width="400" controls>
<source src="images/4.mp4" type="video/mp4">
Your browser does not support HTML5 video.
</video>
但选择因某种原因而丢失。只有在select语句之前显示MessageBox时,选择才有效,如下所示:
int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
myListView.SelectedIndex = lineIndex;
单击消息框上的int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
MessageBox.Show("msg");
myListView.SelectedIndex = lineIndex;
按钮后,将选择索引。这是因为消息框在显示时会阻止UI线程吗?如果是这样,如何在不显示消息框的情况下模拟此行为?
答案 0 :(得分:0)
您是否可以使用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;
}
}
}