如何使Windows 8 Metro滚动查看器响应鼠标滚轮?

时间:2012-03-11 14:55:57

标签: c# mouse scrollviewer windows-8 microsoft-metro

我目前正在使用Metro和C#为Windows 8编写应用程序。在我的应用程序中,我使用scrollviewer和gridview的组合来显示我的数据。但问题是,如何用鼠标滚轮滚动它?

在我的搜索中,我发现MouseWheelParameters位于System.Windows.Input中,但是当我尝试使用get_pageTranslation时,它会给出一个错误,指出我无法显式使用get方法。

3 个答案:

答案 0 :(得分:19)

WinRT中的ScrollViewer可以使用鼠标滚轮开箱即用。但是,在您的场景中,实际上有两个ScrollViewers,您创建的ScrollViewers和GridView模板中的一个。这两个冲突。

为了解决这个问题,我从GridView模板中删除了ScrollViewer,如下所示:

<GridView.Template>
    <ControlTemplate>
        <ItemsPresenter />
    </ControlTemplate>
</GridView.Template>

这似乎有效,但可能有其他不必要的副作用......

答案 1 :(得分:14)

ScrollViewer中有单向滚动的默认样式

<Style x:Key="HorizontalScrollViewerStyle" TargetType="ScrollViewer">
    <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="VerticalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Enabled" />
    <Setter Property="ScrollViewer.VerticalScrollMode" Value="Disabled" />
    <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" />
</Style>

<Style x:Key="VerticalScrollViewerStyle" TargetType="ScrollViewer">
    <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled" />
    <Setter Property="ScrollViewer.VerticalScrollMode" Value="Enabled" />
    <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" />
</Style>

使用这些样式滚动鼠标滚轮。您可能需要单击以将焦点放在ScrollViewer上,以便它移动。

<ScrollViewer Style="{StaticResource HorizontalScrollViewerStyle}">
    <StackPanel ... />
</ScrollViewer>

答案 2 :(得分:2)

“get_pageTranslation”实际上是MouseWheelParameters上的“PageTranslation”属性,您可以通过以下方式访问它:

wheelParameters.PageTranslation

这样:

get_PageTranslation()

是实现PageTranslation属性的方法的名称,但无法从C#或C ++应用程序访问它。