C# wpf scrollviewer鼠标滚轮不使用stackpanel

C# wpf scrollviewer鼠标滚轮不使用stackpanel,c#,scrollviewer,mousewheel,stackpanel,wpf-4.0,C#,Scrollviewer,Mousewheel,Stackpanel,Wpf 4.0,我有一个用scrollviewer包装的stackpanel。在stackpanel内,我有一些网格,网格内又有stackpanel和一些由MahApps Metro控制的瓷砖 如果我拖动滚动条,scrollviewer工作正常。但鼠标滚轮不工作。也许有人控制了鼠标滚轮的动作,但我不能确定是哪一个。我试着在关注滚动条的同时滚动鼠标滚轮。但它仍然不起作用 <ScrollViewer x:Name="TS" Grid.Row="1" HorizontalAlignment="Stretch"

我有一个用scrollviewer包装的stackpanel。在stackpanel内,我有一些网格,网格内又有stackpanel和一些由MahApps Metro控制的瓷砖

如果我拖动滚动条,scrollviewer工作正常。但鼠标滚轮不工作。也许有人控制了鼠标滚轮的动作,但我不能确定是哪一个。我试着在关注滚动条的同时滚动鼠标滚轮。但它仍然不起作用

<ScrollViewer x:Name="TS" Grid.Row="1" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" CanContentScroll="True" PanningMode="HorizontalOnly" SnapsToDevicePixels="True" Background="Transparent">
    <StackPanel x:Name="TilesPanel" VerticalAlignment="Top" HorizontalAlignment="Stretch" Orientation="Horizontal">
        <StackPanel.Resources>
            <Style TargetType="{x:Type Grid}">
                <Setter Property="Margin" Value="0,50,0,0"/>
            </Style>
        </StackPanel.Resources>
        <Separator Background="{x:Null}" Width="110"></Separator>
        <Grid>
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <StackPanel.Resources>
                        <Style TargetType="{x:Type Grid}">
                            <Setter Property="Margin" Value="10,0,0,0"/>
                        </Style>
                    </StackPanel.Resources>
                    <Grid Height="260">
                        <StackPanel>
                            <StackPanel.Resources>
                                <Style TargetType="{x:Type StackPanel}">
                                    <Setter Property="Margin" Value="0,0,0,10"/>
                                </Style>
                            </StackPanel.Resources>
                        <StackPanel Width="247" Height="119">
                            <Custom:Tile x:Name="Mail" Margin="0" Width="auto" d:LayoutOverrides="Height">
                                <Image Stretch="Fill" Source="Res/AppTiles/Mail.png"/>
                            </Custom:Tile>
                        </StackPanel>

                        //and it goes on like this//

                        </grid>
                      </stackpanel>
                <Separator Background="{x:Null}" Width="50"/>
            </Grid>
    </StackPanel>
    </ScrollViewer>

//事情是这样的//
是电网挡住了路吗?或者在水平滚动查看器中使用鼠标滚轮还有其他方法吗?我就是搞不懂。
请提供帮助。

通常,鼠标只有一个滚轮用于垂直滚动。我想你的情况也是这样

根据您的代码,您似乎希望通过鼠标滚轮执行水平滚动

我建议使用
附加属性

样本xaml

<ScrollViewer x:Name="TS"
              Grid.Row="1"
              HorizontalAlignment="Stretch"
              HorizontalScrollBarVisibility="Auto"
              VerticalScrollBarVisibility="Disabled"
              CanContentScroll="False"
              PanningMode="HorizontalOnly"
              SnapsToDevicePixels="True"
              Background="Transparent"
              l:ScrollViewerExtensions.IsHorizontalScrollOnWheelEnabled="true">

整个想法是听鼠标滚轮并根据滚轮的三角形(旋转)向左或向右滚动。

是的,我知道了。并以这种最简单的方式解决了这个问题

<ScrollViewer x:Name="TS" Grid.Row="1" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" CanContentScroll="True" PanningMode="HorizontalOnly" SnapsToDevicePixels="True" Background="Transparent" PreviewMouseWheel="TS_PreviewMouseWheel">

无论如何,谢谢。

似乎
自定义:Tile
正在使用鼠标滚轮事件。你可以发布一些可复制的样本,我们可以试着为你找到根本原因。我已经问过MahApps网站的开发者谁创建了这个控件。他们否认这个问题。我在另一个测试项目中尝试过,发现这些与鼠标滚轮动作无关。你能发布一些屏幕吗?如果您能发布一个工作样本,我们将不胜感激。
<ScrollViewer x:Name="TS" Grid.Row="1" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" CanContentScroll="True" PanningMode="HorizontalOnly" SnapsToDevicePixels="True" Background="Transparent" PreviewMouseWheel="TS_PreviewMouseWheel">
private void TS_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        TS.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
        ScrollViewer scrollviewer = sender as ScrollViewer;
        if (e.Delta > 0)
        {
            scrollviewer.LineLeft();
        }
        else
        {
            scrollviewer.LineRight();
        }
        e.Handled = true;
 }