仅在显示MessageBox后才选择WPF ListView项

时间:2016-03-24 10:00:25

标签: wpf listview

我有一个奇怪的问题:我试图在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线程吗?如果是这样,如何在不显示消息框的情况下模拟此行为?

1 个答案:

答案 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;
        }
    }
}