在UWP Xbox应用程序中使用左棒/鼠标指针滚动滚动查看器

在UWP Xbox应用程序中使用左棒/鼠标指针滚动滚动查看器,uwp,uwp-xaml,xbox,Uwp,Uwp Xaml,Xbox,在我的UWP Xbox应用程序中,我希望有一个页面,其中内容位于ScrollViewer中,并允许用户使用左棒向任何方向滚动内容。我想为这个页面启用指针光标,这样它就可以用来在滚动区域中移动并单击元素 这与边缘浏览器在向下滚动页面时表现出的行为基本相同……当指针指向内容的边缘时,就会出现滚动 我有一个示例页面,如下所示: <Page x:Class="MyApp.MyPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pres

在我的UWP Xbox应用程序中,我希望有一个页面,其中内容位于ScrollViewer中,并允许用户使用左棒向任何方向滚动内容。我想为这个页面启用指针光标,这样它就可以用来在滚动区域中移动并单击元素

这与边缘浏览器在向下滚动页面时表现出的行为基本相同……当指针指向内容的边缘时,就会出现滚动

我有一个示例页面,如下所示:

<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和WebView创建了一些测试应用程序来比较鼠标的行为。开箱即用的WebView的行为方式与我想要的完全相同。我想让左棒控制指针,右棒控制滚动。所以我的问题是:有没有办法让ScrollViewer中的原生XAML内容像WebView中的web内容那样运行

如果我按原样加载此页面,左侧的控制杆允许我滚动页面 在任何方向滚动查看器,这是接近我想要的

对于Xbox One上运行的XAML和托管web应用程序,默认情况下整个应用程序都将启用鼠标模式。在通过在应用程序类中添加以下代码来禁用鼠标模式之前,左侧控制杆不应允许您滚动:

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;
    this.RequiresPointerMode = Windows.UI.Xaml.ApplicationRequiresPointerMode.WhenRequested;
}
这是因为在鼠标模式下,左键是自由模式,右键是滚动模式。这是我们无法改变的设计。详情请参考为Xbox和TV设计的文章

根据您的描述,您已经禁用了鼠标模式,只有当控件或页面调用鼠标模式时,才会启用鼠标模式。因此,左杆可以在页面需要点之前滚动

有人知道我如何完成指针和滚动吗


根据您的要求,左杆不能处于鼠标模式下,也不能处于上述设计的自由模式下。在鼠标模式下,您可以使用左棒作为指针,同时使用右棒进行滚动。如果您只想使用left stick,请对整个应用程序禁用鼠标模式,就像您已经做的那样,然后尝试仅对您希望指针位于内部的控件(而不是整个页面)要求指针指向
when focused
,例如,控件。然后页面可以通过左键滚动,当
WebView
控件聚焦时,左键可以是指针。

在我的情况下,如果我设置RootScrollViewer.requirePointer=requirePointer。当我的ScrollViewer聚焦时,我不会得到指针。我已尝试在页面加载时调用ScrollViewer上的.Focus(…),但仍然无法在ScrollViewer上获得指针。如果我在页面上设置.requirepointer=requirepointer.when焦点,那么我会得到指针,但滚动查看器不会在加载时滚动滚动滚动条….或不调用滚动查看器上的.Focus()
public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;
    this.RequiresPointerMode = Windows.UI.Xaml.ApplicationRequiresPointerMode.WhenRequested;
}