2013-02-28 104 views
4

我有以下代码(略)在我的主窗口中滚动。我认为这与我的用户控制有关。用户控件不在WPF

<Window> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
     <TabControl Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch" Height="Auto" Width="Auto"> 
      <TabItem Header="TEST"> 
      <ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
      <my:MY_USER_CONTROL x:Name="myUserControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.CanContentScroll="True" /> 
      </ScrollViewer> 
     </TabItem> 
     </TabControl> 
     <Button Grid.Column="0" Grid.Row="2" >a button</Button> 
     <WrapPanel Grid.Column="0" Grid.Row="3" > 
     </WrapPanel> 
    </Grid> 
    </Window> 

缩写我的用户控制的结构:

<UserControl> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="183*" /> 
      <ColumnDefinition Width="117*" /> 
     </Grid.ColumnDefinitions> 
     <TreeView ItemsSource="{Binding Children}" Grid.ColumnSpan="2"> 
      <TreeView.ItemContainerStyle> 
       <Style TargetType="{x:Type TreeViewItem}"> 

        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 

        <Setter Property="FontWeight" Value="Normal" /> 
        <Style.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="FontWeight" Value="Bold" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </TreeView.ItemContainerStyle> 

      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding Children}" > 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition></ColumnDefinition> 
          <ColumnDefinition></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition></RowDefinition> 
         </Grid.RowDefinitions> 
         <Grid.Children> 
          <TextBlock Background="LightGray" Padding="2" Margin="2" Grid.Row="0" Grid.Column="0" Text="{Binding Name}" /> 
          <TextBlock Padding="2" Margin="2" Grid.Row="0" Grid.Column="1" Text="{Binding Content}" /> 
         </Grid.Children> 
        </Grid> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView> 
    </Grid> 
</UserControl> 

回答

6

你需要像这样设置它。我将Row0的RowDefinition更改为Height =“*”因此,它将使用尽可能多的空间。然后在ScrollViewer和TabControl之间改变位置。所以TabControl是ScrollViewer的内容。

<Window> 
<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" 
       VerticalScrollBarVisibility="Auto" 
       Grid.Column="0" Grid.Row="0"> 
    <TabControl HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch" 
       Height="Auto" Width="Auto"> 
     <TabItem Header="TEST"> 
     <my:MY_USER_CONTROL x:Name="myUserControl" 
          HorizontalAlignment="Stretch"    
          VerticalAlignment="Stretch" 
          ScrollViewer.CanContentScroll="True" />   
    </TabItem> 
    </TabControl> 
</ScrollViewer> 
<Button Grid.Column="0" Grid.Row="2" >a button</Button> 
<WrapPanel Grid.Column="0" Grid.Row="3" > 
</WrapPanel> 
</Grid> 

+0

只有当我为ScrollViewer设置'Height'时才有效。但是设置ScrollViewer的高度并不是我想要的。 – Onur 2013-02-28 13:14:17

+1

尝试将Row0的RowDefinition更改为; hijack 2013-02-28 13:18:53

+0

这样做的窍门!发布它作为答案,我会接受它。 – Onur 2013-02-28 13:22:40

0

看起来像你的ScrollViewer内的内容,其大小与观众因此没有滚动一样吗?

,如果你这样做

<ScrollViewer HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <Grid Background="Red"> 

    </Grid> 
</ScrollViewer> 

那么网格的大小滚动浏览器相同,绝不允许滚动,如果你设置网格的高度超过了浏览器可以显示你”会得到一个滚轮。

<ScrollViewer HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <Grid Background="Red" Height="500"> 

    </Grid> 
</ScrollViewer> 
+0

设置'<我:MY_USER_CONTROL>'的高度为固定值,也没有真正的帮助。该控件现在具有固定的高度,但不能滚动。 将ScrollViewer的高度设置为固定值可以让内容滚动,但我真的很喜欢'ScrollViewer'来获取可用空间。 – Onur 2013-02-28 12:32:00

1

当您设置CanContentScroll,在ScrollViewer中假定您的内容实现IScrollInfo(我猜doesn't)。

尝试设置在ScrollViewer中CanContentScroll为false,这允许内容,因为它要和ScrollViewer中采取滚动谨慎使用尽可能多的空间。

然而,根据大小,视觉效果你的控制等的数量,这可能成为一个性能问题(例如,当CanContentScroll设置为无UI虚拟化)。

+1

将'CanContentScroll'设置为'false'并没有帮助。我现在假设原因是'ScrollViewer'本身认为它可以占用无限的空间,因此无需滚动内容,因为它适合无限大的'ScrollViewer'。这是因为将ScrollViewer设置为定义的高度/宽度可以实现滚动。但我不想限制应该使用所有可用空间的ScollViewer的大小。 – Onur 2013-02-28 12:42:30