#pixelsense
#pixelsense
Вопрос:
У меня есть SurfaceListBox внутри ScatterViewItem. Все в порядке, но дело в том, что я хотел бы переместить ScatterViewItem, если я не выберу какой-либо элемент SurfaceListBox.
У меня есть следующий код:
<Grid Background="{StaticResource WindowBackground}" >
<s:ScatterView>
<s:ScatterViewItem >
<Viewbox>
<Grid>
<Grid.RowDefinitions >
<RowDefinition/>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions >
<Label Content="Test" Grid.Row ="0"/>
<s:SurfaceListBox Grid.Row="1" Height="200" >
<s:SurfaceListBoxItem Content ="Test"/>
<s:SurfaceListBoxItem Content ="Test2"/>
<s:SurfaceListBoxItem Content ="Test3"/>
<s:SurfaceListBoxItem Content ="Test4"/>
</s:SurfaceListBox >
<Label Content="Test5" Grid.Row ="2"/>
</Grid>
</Viewbox >
</s:ScatterViewItem >
</s:ScatterView >
</Grid>
Если я касаюсь любой из меток, Scatterview реагирует, и я могу переместить его, но если я нажимаю на SurfaceListBox, ScatterView не взаимодействует с моим пальцем (даже если в нем есть элемент или нет).
Что я должен делать? Я проверил события scatterview и не знаю, каким способом это можно включить.
Заранее благодарю,
Pau
Ответ №1:
Сделайте шаг назад и подумайте о том, чего вы действительно хотите добиться… напишите серию инструкций типа «когда пользователь нажимает пальцем на X и движется в направлении Y, тогда должно произойти Z»
Часто выполнение этого показывает, что в том, что вы пытаетесь сделать, есть некоторые конфликты.
Если вы хотите, чтобы пользователь мог провести пальцем по элементу списка и это движение было преобразовано в выбор элемента, прокрутку списка, перемещение контейнера или начало перетаскивания элемента … на самом деле нет способа сделать все это из неоднозначного ввода, который вы получаете от пользователя. Поэтому будьте очень осторожны, чтобы добавление какой-либо функции не нарушило другие функции или не заставило ваше приложение вести себя существенно иначе, чем другие приложения Surface.
Тем не менее, технический ответ на ваш вопрос довольно прост… прослушайте PreviewContactChanged в ScatterViewItem. Как только вы определили, что контакт перемещен в правильном направлении на разумное пороговое расстояние, вызовите contact.Захват (ScatterViewItem) — это переместит «владельца» контакта из listbox в scatterviewitem, который затем будет использовать входные данные контакта для перемещения.
Ответ №2:
Спасибо, Роберт!
Я проверяю PreviewContactChanged элемента ScatterViewItem, но я не знал, что с ним делать. Кто-то привел мне этот пример:http://blog.endquote.com/post/802771198/surfacescrollviewer-behaviors и я попробую это.
Еще раз спасибо за ответ! Pau