2015-04-24 20 views
6

Tôi đang tạo ứng dụng ảnh, sử dụng FlipViewlistView làm Phân trang. Khi tôi nhấp vào hình ảnh thu nhỏ trong ListView, nó cho tôi thấy cùng một hình ảnh trong FlipView. Và khi tôi vuốt vào FlipView, bất kỳ ảnh nào được chọn sẽ chọn cùng một ảnh trong ListView. Này được thực hiện bằng cách thêm vào cả trong số họ:Tính toán bù trừ ngang để cuộn ListView đến trung tâm của SelectedItem

Đối với ListView:

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

Và đến FlipView:

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

Và với sự kiện ListView SelectionChanged Tôi nói thêm:

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

Vấn đề duy nhất của tôi là khi tôi vuốt FlipView, ảnh mong muốn được chọn trong ListView nhưng ScrollViewer không được cuộn đến ảnh đó. Tôi đã cố gắng sử dụng WinRTXamlToolkit để thay đổi vị trí của các ScrollViewer:

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); 
     } 

Lần đầu tiên listWidth1600.0 và sau đó nó trở thành 0.0 tất cả các thời gian, mang đến cho xPos = 0.0!

Làm cách nào để khắc phục sự cố này?

+1

một 'ListViewItem' có một' phương pháp BringIntoView' – Julien

+0

'BringIntoView' không tồn tại trong Windows 8.1! 'BringIntoViewOnFocusChanged' tồn tại cho' ScrollViewer' nhưng nó không hoạt động như mong đợi! – yalematta

+0

Danh sách của bạn có cuộn dọc hay ngang không? Tôi sẽ cố gắng kiểm tra dbl nhưng đưa vào xem tôi nghĩ là trên listview1. Tất cả các mục của bạn có cùng kích thước trong listview không? – Quincy

Trả lời

0

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

Bạn nên sử dụng một trong hai phương pháp "ScrollIntoView".

+0

Tôi đã thử sử dụng: 'listView1.UpdateLayout(); listView1.ScrollIntoView (listView1.SelectedItem); ' Nhưng nó mang lại cho tôi cùng một lỗi: khi tôi lật vào nhiều ảnh' FlipView' (không nhìn vào 'ListView' sau mỗi lần lật), khi tôi nhìn vào 'ListView' Tôi thấy nó không cuộn đến' SelectedIndex' – yalematta

+0

Tôi cũng đã sử dụng: 'var zoomLoc = new SemanticZoomLocation() {Item = listView1.SelectedItem}; listView1.MakeVisible (zoomLoc); 'và tôi đang gặp lỗi tương tự ... – yalematta

+0

Khó nghe. Từ kinh nghiệm cá nhân, phương pháp tôi đề cập đã làm việc cho tôi trong quá khứ.thử làm một ứng dụng đơn giản chết mà chỉ có một listview dọc với các mục và sau đó một khi các mục được nạp sử dụng ScrollIntoView để đi đến mục thứ ba. Nếu điều đó làm việc ít nhất của bạn trên một con đường tốt. Sau đó, từ từ thêm nhiều vào nó như cuộn ngang và xem nếu nó vẫn hoạt động vv – Quincy

0

ListView.ScrollIntoView() sẽ hoạt động. Có thể có vấn đề với việc gọi một phương pháp để cuộn một ScrollViewer trong khi nó đã cuộn mặc dù. Tôi sẽ thử fiddling với ScrollViewer.InvalidateScrollInfo() mà có thể tăng tốc độ nó lên. Nếu không - bạn có thể thử xử lý các sự kiện ViewChanging/ViewChanged để xem nó có đang cuộn hay không và cố gắng sử dụng thông tin đó cùng với ScrollViewerViewChangedEventArgs.IsIndeterminate để thực hiện cuộc gọi.

Ngoài ra kiểm tra câu trả lời của tôi cho câu hỏi này: Centering selected item in a scroll viewer

Các vấn đề liên quan