2013-03-22 514 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包含一个项目,我离开他们离开这看起来几乎相同。

相关问题