【问题标题】:ScrollViewer.ChangeView() does not scroll horizontallyScrollViewer.ChangeView() 不水平滚动
【发布时间】:2015-09-17 08:40:46
【问题描述】:

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

当检测到操作增量事件时,滚动应该开始,我已经使用 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 等于零,我不明白为什么。

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

【问题讨论】:

    标签: c# xaml windows-phone-8.1 scrollviewer


    【解决方案1】:

    我自己找到了解决办法!

    我必须在水平滚动查看器上添加水平滚动条可见性选项。这很奇怪,因为我不需要将它添加到垂直的。无论如何,这是水平滚动查看器的代码:

    <ScrollViewer x:Name="horizontalScrollViewer" 
                      Grid.RowSpan="3"
                      Grid.Column="1"
                      HorizontalScrollMode="Disabled"
                      HorizontalScrollBarVisibility="Auto"
                      VerticalScrollMode="Disabled">
    

    【讨论】:

      【解决方案2】:

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

      <ScrollViewer x:Name="horizontalScrollViewer" 
                        Grid.Column="1"
                        Grid.RowSpan="3"
                        HorizontalScrollMode="Enabled"
                        VerticalScrollMode="Enabled"
                        HorizontalScrollBarVisibility="Hidden"
                        VerticalScrollBarVisibility="Hidden">
      ...
      </ScrollViewer>
      

      【讨论】:

      • 不,这不是我的目标。垂直滚动查看器完全相同,并且可以正常工作。出于我的目的,我不能使用 scrollviewer 滚动,我必须检测网格上的操作事件,然后使用 ChangeView 方法以编程方式滚动元素。不幸的是,水平滚动查看器无法正常工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2013-08-09
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多