2017-01-09 28 views
1

在我的UWP Xbox应用程序中,我希望有一个页面,其内容位于ScrollViewer中,并允许用户使用左侧滚动条向任意方向滚动内容。我想为此页面启用指针游标,以便它可以用于移动滚动区域并单击元素。在UWP Xbox应用程序中留有游标/鼠标指针滚动滚动查看器

这与浏览器在向下滚动页面时显示的行为基本相同......当指针到达内容的边缘时,会发生滚动。

我有一个示例页面看起来像这样:

<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的行为方式与我想要的完全一样。我想让左边的控制杆控制指针,右边的控制杆控制滚动。所以我的问题是:有没有办法让ScrollViewer内部的本机XAML内容像Web内容一样在WebView中运行?

回答

1

如果我现在这个样子加载该页面,左摇杆让我滚动 ScrollViewer中任何方向,这是接近我想要

对于这两个XAML和托管的Web应用程序在Xbox One上运行时,整个应用默认打开鼠标模式。左摇杆不应允许您可以滚动,直到你在你的应用类中添加如下代码禁用鼠标模式:

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

这是因为当在鼠标模式下,左摇杆是免费模式,右摇杆是滚动为this picture shows.This是由设计,我们不能改变。详情请参阅设计Xbox和TV文章的Mouse mode section

根据你的描述你已经禁用鼠标模式,只有当一个控件或页面调用它时,它才会被启用。所以左边的摇杆可以在页面需要点之前滚动。

任何人都知道我可以如何完成指针和滚动?

根据您的要求,左键不能处于鼠标模式下,也不能处于上述设计的自由模式下。在鼠标模式下,您可以使用左侧指针作为指针,同时右键进行滚动。如果您只想使用左侧控制杆,请像您已经完成的那样禁用整个应用程序的鼠标模式,然后尝试只需要指向whenfocused的指针指向您希望指针不在整个页面内的控件,例如WebView控件。然后页面可以通过左侧滚动条滚动,当WebView控件聚焦时,左侧的滚动条可以是指针。

+0

在我的情况下,如果我为我的ScrollViewer设置了RootScrollViewer.RequiresPointer = RequiresPointer.WhenFocused,我没有得到指针。我曾尝试在页面加载时在ScrollViewer上调用.Focus(...),但我仍然没有在ScrollViewer上获得指针。如果我设置.RequiresPointer = RequiresPointer.When专注于页面上,然后我得到的指针,但滚动查看器不滚动任何棍子....有或没有调用加载ScrollViewer上的.Focus() – Scott