2014-01-29 3 views
1

Я хотел бы получить «реальное» значение Y точки, на которую я нажал, при прокрутке списка.Получить координаты в списке при прокрутке вниз

Вот XAML:

<Window x:Class="MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="MainWindow" MaxHeight="350" MinHeight="350" Width="525"> 
<Grid> 
    <ListView Name="MyListView" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"> 
    </ListView> 
</Grid> 
</Window> 

и вот код:

Class MainWindow 
Sub New() 
    InitializeComponent() 
    For i As Integer = 0 To 100 
     MyListView.Items.Add(i) 
    Next 
End Sub 
Private Sub MyListView_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles MyListView.MouseLeftButtonUp 
    MsgBox(e.GetPosition(MyListView).Y) 
End Sub 
End Class 

Моя проблема сейчас в том, что независимо от того, как далеко вниз, я прокручивается, верх всегда 1 и дно всегда 309, но при прокрутке вниз я хотел бы получить значения выше 309. Есть ли способ узнать «реальную» координату Y, на которую я нажал, или, возможно, узнать, как далеко я прокрутил прокрутку, а затем смог вычислить скорректированное значение? Обтекание списком в элементе управления scrollviewer не является опцией btw.

Спасибо за любые ответы

+0

Добро пожаловать в Переполнение Staock. Ваш вопрос хорошо написан, но вы можете улучшить ситуацию, добавив теги, которые описывают языки, относящиеся к вопросу – GreenAsJade

+0

Спасибо, я ценю вашу помощь. – Isildur

+0

Надеюсь, кто-то будет рядом, кто может ответить на вопрос. Я не человек vb.net, но, как правило, я ожидал бы ответа на этот вопрос, связанного с запросом скроллера, насколько он прокручивается. Возможно, это то, что нужно изучить ... – GreenAsJade

ответ

0

Для того, чтобы определить реальную величину Y, вы должны знать сумму, которая была прокручивать, которую ScrollViewer может сказать.

Вы можете получить scrollviewer как дочерний элемент списка (Media.VisualTreeHelper.GetChild(Mylistview,0).Child), а оттуда его вертикальное смещение (Scrollviewer.VerticalOffset). Вертикальное смещение не дает вам координаты y-координат, вместо этого вы получаете количество элементов списка, прокручиваемых вниз. Вы можете легко с этим справиться.