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

Fed*_*gel 7 c# mouse scrollviewer microsoft-metro windows-8

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

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

Kri*_*ten 19

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

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

<GridView.Template>
    <ControlTemplate>
        <ItemsPresenter />
    </ControlTemplate>
</GridView.Template>
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您需要鼠标滚轮和滑动选择,您可以使用AddHandler方法挂钩PointerWheelChanged事件并设置e.Handled = false.详细信息请访问:http://briandunnington.github.com/gridview-in-a-scrollviewer.html (4认同)

kin*_*ple 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>
Run Code Online (Sandbox Code Playgroud)

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

<ScrollViewer Style="{StaticResource HorizontalScrollViewerStyle}">
    <StackPanel ... />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)


Rei*_*man 2

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

wheelParameters.PageTranslation
Run Code Online (Sandbox Code Playgroud)

这:

get_PageTranslation()
Run Code Online (Sandbox Code Playgroud)

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