ScrollViewer.ChangeView()不会水平滚动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ScrollViewer.ChangeView()不会水平滚动相关的知识,希望对你有一定的参考价值。

我正在尝试创建两个分别垂直和水平滚动的滚动查看器。

当检测到操纵增量事件时,滚动应该开始,并且我已经使用ChangeView方法相应地移动了滚动查看器。垂直滚动查看器还可以,但水平滚动查看器则不同。我添加了image来显示2个滚动查看器,因为我无法在此处发布它。

这里是代码:XAML

   <!--horizontal scrollviewer--> 
   <ScrollViewer x:Name="horizontalScrollViewer" 
                  Grid.Column="1"
                  Grid.RowSpan="3"
                  HorizontalScrollMode="Disabled"
                  VerticalScrollMode="Disabled">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="80"/>
                <RowDefinition Height="100"/>
                <RowDefinition Height="80"/>
            </Grid.RowDefinitions>
            <!--upperGrid-->
            <GridView Grid.Row="0"
                      ScrollViewer.HorizontalScrollMode="Disabled"
                      ScrollViewer.VerticalScrollMode="Disabled"
                      ItemsSource="{Binding dataItems}">
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid Orientation="Vertical"
                                           MaximumRowsOrColumns="1"/>
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
                <GridView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Height="80" Width="80" Text="{Binding}"/>
                    </DataTemplate>
                </GridView.ItemTemplate>
            </GridView>
            <!--bottomGrid-->
            <GridView Grid.Row="2"
                      ScrollViewer.HorizontalScrollMode="Disabled"
                      ScrollViewer.VerticalScrollMode="Disabled"
                      ItemsSource="{Binding dataItems}">
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid Orientation="Vertical"
                                           MaximumRowsOrColumns="1"/>
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
                <GridView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Height="80" Width="80" Text="{Binding}"/>
                    </DataTemplate>
                </GridView.ItemTemplate>
            </GridView>

        </Grid>
    </ScrollViewer>

。cs

    private void dataGrid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
         var x = e.Delta.Translation.X;
        var y = e.Delta.Translation.Y;
        if(Math.Abs(x)> Math.Abs(y))
        {

            bool result = horizontalScrollViewer.ChangeView( horizontalScrollViewer.HorizontalOffset - x , null, null);
            result = centralScrollViewer.ChangeView(horizontalScrollViewer.HorizontalOffset - x, null, null);

        }
        else
        {
            bool result = centralScrollViewer.ChangeView(null, verticalScrollViewer.VerticalOffset -y, null);
            verticalScrollViewer.ChangeView(null, verticalScrollViewer.VerticalOffset - y, null);

        }
    }

在msdn文档中,我已经读过:

水平偏移类型:IReference [C ++] | System.Nullable [.NET]一个介于0和ScrollableWidth之间的值,它指定内容>应该水平滚动的距离。]

但是我的ScrollableWidth等于零,我不明白为什么。

有人知道我的代码有什么问题吗?

我正在尝试创建两个分别垂直和水平滚动的滚动查看器。滚动应该在检测到操纵增量事件时开始,并且我已经使用ChangeView ...

答案

我自己找到了解决方案!

另一答案

我认为禁用滚动时您无法滚动。如果您只是想隐藏滚动条,请执行以下操作:

以上是关于ScrollViewer.ChangeView()不会水平滚动的主要内容,如果未能解决你的问题,请参考以下文章