2016-03-24 29 views
0

Garip bir sorun var görüntülenir sonra seçildiğindeWPF ListView öğesi MessageBox

int lineIndex = 123; 
scrollView.ScrollToVerticalOffset(lineIndex); 
myListView.SelectedIndex = lineIndex; 

Ama seçim nedense kaybolur. Ben select deyimi önce MessageBox göstermek Sadece eğer, seçim bu gibi çalışır:

int lineIndex = 123; 
scrollView.ScrollToVerticalOffset(lineIndex); 
MessageBox.Show("msg"); 
myListView.SelectedIndex = lineIndex; 

Ben mesajı kutuyu OK butonuna tıklayın sonra endeks seçilmiş olur. Bunun nedeni, görüntülenen bir ileti kutusunun UI iş parçacığını engellemesidir. Eğer öyleyse, bu davranışı mesaj kutusunu göstermeden nasıl simüle edebilirim?

cevap

0

Liste görünümündeki scrollviewer'ı kullanmak yerine SelectedItem özelliğini kullanabiliyor musunuz? Aşağıdaki kod listede 20'nci öğeyi seçmeyi ve kaydırmayı kaydırmayı gösterir.

<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> 
ve benim ListView veri sanallaştırma kullanıyor çünkü `ScrollIntoView` kullanamazsınız

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; 
     } 
    } 
} 
+0

arkasında kodu. ListView öğelerinin bir sınıfı örnekleridir. Kullanıcı Arabirimi/çalışan iş parçacığı ile ilgili bir sorun gibi görünüyor. Çünkü mesaj kutusunu görüntülediğimde ve 'Tamam' ı tıkladıktan sonra UI/worker thread devam ediyor ve öğe doğru şekilde seçiliyor. – JohnVn