簡體   English   中英

ScrollViewer.ChangeView() 不水平滾動

[英]ScrollViewer.ChangeView() does not scroll horizontally

我正在嘗試創建兩個分別垂直和水平滾動的滾動查看器。

當檢測到操作增量事件時,滾動應該開始,我已經使用 ChangeView 方法相應地移動滾動查看器。 垂直滾動查看器還可以,但水平滾動查看器不一樣。 我添加了一張圖片來顯示 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 等於零,我不明白為什么。

有誰知道我的代碼有什么問題?

我自己找到了解決方案!

我必須在水平滾動查看器上添加水平滾動條可見性選項。 這很奇怪,因為我不需要將它添加到垂直的。 無論如何,這是水平滾動查看器的代碼:

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

我不認為您可以在禁用滾動時滾動。 如果您只是想隱藏滾動條,請執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM