2013-02-28 93 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