2017-01-09 3 views
1

В моем приложении UWP Xbox у меня есть страница, где содержимое находится в ScrollViewer и позволяет пользователю прокручивать содержимое в любом направлении с помощью левой кнопки. Я бы хотел, чтобы курсор указателя был включен для этой страницы, чтобы его можно было использовать для перемещения по области прокрутки и элементам щелчка.Ушли прокрутка указателя мыши/указателя мыши ScrollViewer в приложении UWP Xbox

Это по сути то же поведение, что и браузер Edge при прокрутке вниз страницы ... когда указатель попадает на край содержимого, происходит прокрутка.

У меня есть пример страницы, которая выглядит следующим образом:

<Page 
x:Class="MyApp.MyPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<Grid>  

    <ScrollViewer x:Name="RootScrollViewer" IsTabStop="True" ZoomMode="Enabled" HorizontalScrollMode="Enabled" HorizontalScrollBarVisibility="Visible" VerticalScrollMode="Enabled" VerticalScrollBarVisibility="Visible" > 
     <Grid x:Name="TheGrid" Width="1400" Height="1400" Margin="{StaticResource DefaultAllMargin}"> 
      <Rectangle Width="315" Height="200" VerticalAlignment="Top" HorizontalAlignment="Left" Fill="Green"/> 
      <Rectangle Width="315" Height="200" VerticalAlignment="Bottom" HorizontalAlignment="Left" Fill="Blue"/> 
      <Rectangle Width="315" Height="200" VerticalAlignment="Center" HorizontalAlignment="Center" Fill="Blue"/> 
      <Rectangle Width="315" Height="200" VerticalAlignment="Bottom" HorizontalAlignment="Right" Fill="Blue"/> 
      <Rectangle Width="315" Height="200" VerticalAlignment="Top" HorizontalAlignment="Right" Fill="Blue"/> 
     </Grid> 
    </ScrollViewer> 

</Grid> 

Если я загрузить эту страницу, как она есть, левая ручка позволяет мне прокрутки ScrollViewer в любом направлении, который близок к тому, что я хочу. Однако, если я добавлю приведенный ниже код в свой конструктор страницы, чтобы включить указатель, я получаю указатель, но теперь левая кнопка просто перемещает указатель внутри страницы, но не прокручивает ScrollViewer.

this.RequiresPointer = RequiresPointer.WhenFocused; 

Кто-нибудь знает, как я могу выполнить указатель и прокрутку?

Обновление: Я создал несколько тестовых приложений, используя ScrollViewer, а также WebView, чтобы сравнить, как ведет себя одна мышь. То, как работает готовый WebView, как я хочу. Я хочу, чтобы левая кнопка управляла указателем и правой палкой для управления прокруткой. Поэтому мой вопрос заключается в следующем: существует ли способ заставить собственный контент XAML внутри ScrollViewer вести себя так, как это делает веб-контент внутри WebView?

ответ

1

Если я загрузить эту страницу, как она есть, левая ручка позволяет мне прокручивать ScrollViewer в любом направлении, что близко к тому, что я хочу

Для обоих XAML и размещение веб-приложений работающий на Xbox One, режим мыши включен по умолчанию для всего приложения. Левая ручка не должна позволять вам прокручивать, пока вы не отключите режим мыши, добавив последующий код в вашем классе App:

public App() 
{ 
    this.InitializeComponent(); 
    this.Suspending += OnSuspending; 
    this.RequiresPointerMode = Windows.UI.Xaml.ApplicationRequiresPointerMode.WhenRequested; 
} 

Это происходит потому, что, когда в режиме мыши, левый джойстик для свободного режима, правая ручка для прокрутка как this picture показывает. Это по дизайну, что мы не можем изменить. Подробности см. В статье Mouse mode section статьи «Проектирование для Xbox и телевидения».

В соответствии с вашим описанием вы уже отключили режим мыши, и только когда элемент управления или страница вызвали его, он будет включен. Таким образом, левая кнопка может прокручиваться до того, как страница потребует точки.

Кто-нибудь знает, как я могу выполнить указатель и прокрутку?

Для ваших требований левая ручка не может находиться в режиме мыши, а также в свободном режиме, который указан по вышеуказанному дизайну. Когда в режиме мыши вы можете использовать левую кнопку для указателя и в то же время правую кнопку для прокрутки. Если вы хотите использовать только левую кнопку, отключите режим мыши для всего приложения, как вы уже сделали, а затем попробуйте только указать указатель на whenfocused для элемента управления, в котором вы хотите указатель внутри не для всей страницы, например, WebView.Затем страницей можно прокручивать левую ручку, а когда управление WebView сфокусировано, левой клавишей может быть указатель.

+0

В моем случае, если я установил RootScrollViewer.RequiresPointer = RequiresPointer.WhenFocused для моего ScrollViewer, я не получаю указатель. Я попытался вызвать .Focus (...) на ScrollViewer при загрузке страницы, но я все еще не получаю указатель на ScrollViewer. Если я установил .RequiresPointer = RequiresPointer.WhenFocused на странице, тогда я получаю указатель, но средство просмотра прокрутки не прокручивается с помощью кнопки ... с или без вызова .Focus() в ScrollViewer при загрузке – Scott