2013-03-22 121 views
2

我有以下Xaml。我有一個網格包含一些「柱頭」和一個列表框。目前我的水平滾動條滾動列標題和列表框。我的垂直滾動條只滾動列表框,因爲我希望列標題「凍結」。我遇到的問題是我必須一直向右滾動才能看到垂直滾動條。是否有任何「鎖定」垂直滾動條總是可見的(當它需要時)以及它只是滾動列表框?如果您需要更多信息,請告訴我。垂直嵌套滾動始終可見

<Grid Name="test1" Margin="0,0,50,0" Grid.Row="0"> 
    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" Width="{Binding ElementName=test1, Path=ActualWidth}"> 
     <Grid Name="grdMain" > 
      <Grid.RowDefinitions> 
       <RowDefinition Height="10*" /> 
       <RowDefinition Height="90*" /> 
      </Grid.RowDefinitions> 
       <StackPanel Grid.Row="0"> 
        <ItemsControl Name="ColumnHeaders" ..> 
        </ItemsControl> 
       </StackPanel> 
       <StackPanel Name="check" Grid.Row="1"> 
        <ScrollViewer Height="{Binding ElementName=check, Path=ActualHeight}" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Hidden"> 
         <ListBox Name="lstDrop" ..> 
         </ListBox> 
        </ScrollViewer> 
       </StackPanel> 
      </Grid> 
     </ScrollViewer> 
       </Grid> 

下面是當前功能的屏幕截圖:

Scrolling without bar visible

Scrolling with bar visible

+1

如何綁定到列表框的水平滾動條的新列中的手輪滾動條? – CShark 2013-03-23 15:24:25

+0

你能發佈一個代碼示例作爲答案嗎? – user589195 2013-03-25 09:08:58

回答

0

最後,這是一個有點令人討厭,因爲我以爲。不過,這裏有一些東西。我必須對最初的想法和佈局做一些修改,但之後它看起來都一樣。

<Grid Name="test1" Margin="0,0,50,0" Grid.Row="0"> 
    <Grid Name="grdMain" > 
     <Grid.RowDefinitions> 
      <RowDefinition Height="10*" /> 
      <RowDefinition Height="90*" /> 
     </Grid.RowDefinitions> 
     <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" Name="scv_headers"> 
      <ItemsControl Name="ColumnHeaders"> 
       <!--Headers here--> 
      </ItemsControl> 
     </ScrollViewer> 

     <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" ScrollChanged="List_OnScrollChanged"> 
      <ListBox Name="lstDrop"> 
       <!--Items here--> 
      </ListBox> 
     </ScrollViewer> 
    </Grid> 
</Grid> 

由於滾動條隱藏在模板中,我不得不添加的背後

private void List_OnScrollChanged(object sender, ScrollChangedEventArgs e) 
    { 
     var scrollbarSrc = (ScrollBar)((ScrollViewer)e.OriginalSource).Template.FindName("PART_HorizontalScrollBar", (ScrollViewer)e.OriginalSource); 

     scv_headers.ScrollToHorizontalOffset(scrollbarSrc.Value); 
    } 

一些代碼,因爲你只stackpanels包含一個項目,我離開他們離開這看起來幾乎相同。