2015-04-24 36 views
6

Bir Fotoğraf Uygulaması oluşturuyorum, bir FlipView ve bir listView bir Pagination. ListView'daki küçük resme tıklandığında bana FlipView numaralı resimde aynı resmi gösterir. Ve FlipView'a girdiğimde, seçilen herhangi bir fotoğraf ListView'da aynı resmi seçecektir. Bu ikisine de ekleyerek yapılır:ListView'i SelectedItem öğesinin ortasına kaydırmak için Yatay Ofseti hesapla

ListView için:

SelectedIndex="{Binding Path=SelectedIndex, ElementName=flipView1, Mode=TwoWay} 

Ve FlipView için:

SelectedIndex="{Binding Path=SelectedIndex, ElementName=listView1, Mode=TwoWay} 

Ve ListView SelectionChanged olaya ekledim:

if (e.AddedItems.Count > 0) 
     listView1.ScrollIntoView(e.AddedItems.First(), ScrollIntoViewAlignment.Leading); 

Tek sorunum,numaralı telefonu kaydırdığımda, istenen resim ListView'da seçilidir, ancak ScrollViewer ona kaydırılmaz. Ben ScrollViewer konumunu değiştirmek için WinRTXamlToolkit kullanarak çalıştı:

private void pageRoot_Loaded() 
     { 
      // count number of all items 
      int itemCount = this.listView1.Items.Count; 
      if (itemCount == 0) 
       return; 

      if (listView1.SelectedIndex >= itemCount) 
       listView1.SelectedIndex = itemCount - 1; 

      // calculate x-posision of selected item 
      double listWidth = this.listView1.ActualWidth; 
      double xPos = (listWidth/itemCount) * listView1.SelectedIndex; 

      // scroll 
      var scrollViewer2 = listView1.GetFirstDescendantOfType<ScrollViewer>(); 
      if (scrollViewer2 != null) 
       scrollViewer2.ChangeView(xPos, 0.0, 1); 
     } 

ilk kez listWidth1600.0 ve o zaman xPos = 0.0 verir 0.0 her zaman, olur!

Bunu nasıl düzeltebilirim?

+1

bir 'ListViewItem' bir' BringIntoView' yöntemi – Julien

+0

'BringIntoView' Windows 8.1'de mevcut değil var! 'ScrollViewer' için' BringIntoViewOnFocusChanged' var, ancak beklendiği gibi çalışmıyor! – yalematta

+0

Listeniz dikey mi yatay mı kaydırılıyor? Kontrol etmeyi deneyeceğim ama listview1'de olduğunu düşündüğüm manzaraya getireceğim. Tüm öğeleriniz liste görünümünde aynı boyutta mı? – Quincy

cevap

0

https://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.listview.aspx

iki "ScrollIntoView" yöntemlerden birini kullanmalıdır.

+0

Kullanmayı denedim: 'listView1.UpdateLayout(); listView1.ScrollIntoView (listView1.SelectedItem); ' Ama bana aynı hatayı veriyor:' FlipView' içine çevirdiğimde birçok görüntü (her çevirmeden sonra 'ListView' seçeneğine bakmadan) 'ListView'' 'SelectedIndex' – yalematta

+0

’a kaydırma yapmadığını buldum. Ayrıca kullandım: ' var zoomLoc = new SemanticZoomLocation() {Item = listView1.SelectedItem}; listView1.MakeVisible (zoomLoc); 've aynı hatayı alıyorum ... – yalematta

+0

Sesler zor. Kişisel deneyimimden bahsettiğim yöntem geçmişte benim için çalışmıştır.Sadece öğelerle bir dikey liste görünümü olan bir ölü basit bir uygulama yapmayı deneyin ve daha sonra öğeler yüklendikten sonra üçüncü maddeye gitmek için ScrollIntoView kullanın. Eğer bu sizin en azından iyi bir yolda çalışıyorsa. Daha sonra yavaşça yatay kaydırma gibi daha fazlasını ekleyin ve hala çalışıyor mu gibi görünün? – Quincy

0

ListView.ScrollIntoView() çalışmalıdır. Zaten kaydırma yaparken ScrollViewer kaydırmak için bir yöntem çağırma ile ilgili sorunlar olabilir. Hızlandırabilen ScrollViewer.InvalidateScrollInfo() ile uğraşmayı deneyeceğim. Aksi takdirde, kaydın olup olmadığını görmek için ViewChanging/ViewChanged olaylarını işleme sokmayı deneyebilir ve çağrıları zincirlemek için bu bilgiyi ScrollViewerViewChangedEventArgs.IsIndeterminate ile birlikte kullanmayı deneyebilirsiniz.

Ayrıca, bu soruya cevabım kontrol edin: Centering selected item in a scroll viewer