【问题标题】:How can I make a Windows 8 Metro scrollviewer respond to mousewheel?如何让 Windows 8 Metro 滚动查看器响应鼠标滚轮?
【发布时间】:2012-03-11 14:55:56
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    这似乎行得通,但它可能有其他不需要的副作用......

    【讨论】:

    • 我只想指出,您将无法使用触摸在网格视图中“滑动选择”项目。因此,如果您需要滑动选择,则需要尝试其他方法。
    • 如果您需要鼠标滚轮滚动和滑动选择,您可以使用 AddHandler 方法来挂钩 PointerWheelChanged 事件并设置 e.Handled = false。完整详情:briandunnington.github.com/gridview-in-a-scrollviewer.html
    【解决方案2】:

    在 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>
    

    【讨论】:

      【解决方案3】:

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

      wheelParameters.PageTranslation
      

      这个:

      get_PageTranslation()
      

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

      【讨论】:

      • 顺便说一句,我相信在消费者预览中,可以将scrollviewer配置为使用鼠标滚轮自动滚动。但我不是 100% 确定该怎么做。
      • 一直没找到,不过应该很有意义
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 2011-09-29
      相关资源
      最近更新 更多