How can I make a Windows 8 Metro scrollviewer respond to mousewheel?

放肆的年华 提交于 2019-12-20 23:47:20

问题


I'm currently writing an app for Windows 8 using Metro and C#. In my app I use a combination of scrollviewer and gridview to show my data. My problem is however, how can I make it scrollable with a mouse wheel?

In my searching I found MouseWheelParameters located in System.Windows.Input, but when I try to use the get_pageTranslation, it gives an error stating I can't explicitly use the get method.


回答1:


The "get_pageTranslation" is actually the "PageTranslation" property on the MouseWheelParameters, you access it by saying:

wheelParameters.PageTranslation

this:

get_PageTranslation()

is the name of the method which implements the PageTranslation property, but it is not accessible from C# or C++ applications.




回答2:


The ScrollViewer in WinRT does work out of the box with the mouse wheel. However, in your scenario there are really two ScrollViewers, the one you created and the one inside the GridView template. These two conflict.

To solve this problem, I removed the ScrollViewer from the GridView template as follows:

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

This seems to work, but it may have other unwanted side effects...




回答3:


There are default styles for unidirectional scrolling in a 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>

Use these styles to scroll with the mouse wheel. You may need to click to give focus to the ScrollViewer so it will move.

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


来源:https://stackoverflow.com/questions/9655992/how-can-i-make-a-windows-8-metro-scrollviewer-respond-to-mousewheel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!