2011-07-14 80 views
3

我想在我的程序中使用一个简单的ScrollViewer,但我遇到了问题。WPF ScrollViewer问题

如果我在一个ScrollViewer中附上我的程序中的一切,它工作正常:

<Window x:Class="WpfTest.MainWindow"   
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Name="PrimaryWindow"> 
    <ScrollViewer> 
     <StackPanel> 
      <Menu Height="21" VerticalAlignment="Top"> 
       <MenuItem Header="File"/> 
       <MenuItem Header="Edit"/> 
      </Menu> 
      <StackPanel> 
       <TextBlock Text="1"/> 
       <TextBlock Text="2"/> 
       <TextBlock Text="3"/> 
       <TextBlock Text="4"/> 
       <TextBlock Text="5"/> 
       <TextBlock Text="6"/> 
       <TextBlock Text="7"/> 
       <TextBlock Text="8"/> 
       <TextBlock Text="9"/> 
       <TextBlock Text="10"/> 
      </StackPanel> 
     </StackPanel> 
    </ScrollViewer> 
</Window> 

然而,由于菜单是ScrollViewer中,菜单滚动出屏幕的一部分用户向下滚动时。所以我把ScrollViewer只放在菜单下面的控件上:

<Window x:Class="WpfTest.MainWindow"   
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Name="PrimaryWindow"> 
    <StackPanel> 
     <Menu Height="21" VerticalAlignment="Top"> 
      <MenuItem Header="File"/> 
      <MenuItem Header="Edit"/> 
     </Menu> 
     <ScrollViewer> 
      <StackPanel> 
       <TextBlock Text="1"/> 
       <TextBlock Text="2"/> 
       <TextBlock Text="3"/> 
       <TextBlock Text="4"/> 
       <TextBlock Text="5"/> 
       <TextBlock Text="6"/> 
       <TextBlock Text="7"/> 
       <TextBlock Text="8"/> 
       <TextBlock Text="9"/> 
       <TextBlock Text="10"/> 
      </StackPanel> 
     </ScrollViewer> 
    </StackPanel> 
</Window> 

但是这一次,ScrollViewer不起作用!即使我调整窗口的尺寸使其小于标签所需的高度,滚动条也不会被激活。

我在做什么错?

回答

6

问题是由您的根StackPanel引起的,StackPanel不限制ScrollViewer的垂直高度。

尝试使用DockPanel中来定位,而不是菜单:

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 
<DockPanel> 
    <Menu DockPanel.Dock="Top" Height="21" VerticalAlignment="Top"> 
     <MenuItem Header="File"/> 
     <MenuItem Header="Edit"/> 
    </Menu> 
    <ScrollViewer> 
     <StackPanel> 
      <TextBlock Text="1"/> 
      <TextBlock Text="2"/> 
      <TextBlock Text="3"/> 
      <TextBlock Text="4"/> 
      <TextBlock Text="5"/> 
      <TextBlock Text="6"/> 
      <TextBlock Text="7"/> 
      <TextBlock Text="8"/> 
      <TextBlock Text="9"/> 
      <TextBlock Text="10"/> 
     </StackPanel> 
    </ScrollViewer> 
</DockPanel> 

+0

谢谢,工作! – HighCommander4

1

只有在祖先元素的高度或宽度改变时,ScrollViewer才会出现它的条。所以,您的祖先是StackPanel,并且在您调整窗口大小时不会更改大小。

1

切勿使用一个StackPanel用的ScrollViewer里面,因为StackPanel的是作为其内容想做大!所以ScrollViewer认为它总是足够的地方!

该scrollViewer必须在一切之外