2016-02-19 31 views
0

我想要兩行的網格。行應該只佔用他們需要的空間(這就是爲什麼Grid VerticalAlignment設置爲Top)。當沒有足夠的空間顯示兩行滾動條時應該出現。我嘗試過與Auto,*,MinHeight等不同的組合,但沒有成功。帶兩行和滾動查看器的網格

<Window x:Class="WpfApplication5.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:my="clr-namespace:WpfApplication5" 
     Title="MainWindow" Height="388" Width="525" FontSize="25"> 
    <Grid VerticalAlignment="Top"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <Border Height="100" Background="Red" > 
       <StackPanel> 
        <TextBlock Text="1"/> 
        <TextBlock Text="2"/> 
        <TextBlock Text="3"/> 
        <TextBlock Text="4"/> 
       </StackPanel> 
      </Border> 
     </ScrollViewer> 
     <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <Border Background="Green" > 
       <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> 
      </Border> 
     </ScrollViewer> 
    </Grid> 
</Window> 

編輯檢查這一形象。爲什麼第一排沒有4個,爲什麼底部有空的空間。 enter image description here

+0

你的解決方案工作,沒有足夠的空間時出現滾動條。它們並不是同時出現的,因爲它們的內容不同。你想要什麼,讓他們總是同時出現? – icebat

+0

查看我更新的答案。我希望這是你的預期。 – Gopichandar

+0

查看編輯的問題。第一行沒有滾動條,底部沒有空格,我不明白爲什麼。 – kurin123

回答

0
<Border Height="100" Background="Red" > 

Height="100"使得在第一排4號的內容,以掩飾內心。此外,您已將行設置爲兩個相等的部分,但內容不相同,從而在窗口底部留出空白空間。

+0

這添加一個滾動查看器周圍。我想有兩個滾動查看器中的每一行 – kurin123

+0

@ kurin123。 。看到更新的答案。你仍然不清楚你想實現什麼 – Gopichandar

+0

我想有兩排網格(或其他控件)。直到他們的內容將被裁剪,行將會高度增長,滾動條將被顯示。可以說網格的空間是500px,第一行的內容是400px,第二行的內容是600px。所以第一行將200px與滾動條和第二將300px與滾動條。在第一行和第二行的聯繫是動態的,所以我不能在設計期間爲網格行設置2 *,3 *,他們必須在運行時進行調整。 – kurin123

0

有沒有解決開箱即用,因爲它取決於你希望兩個scrollviewers之間有什麼比,在我的例子中,我選擇50/50:

<Window x:Class="WpfApplication.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 

<Canvas x:Name="OverallCanvas" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
    <Grid x:Name="OverallGrid" Width="{Binding ElementName=OverallCanvas, Path=ActualWidth}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 

     <ScrollViewer x:Name="Scroll1" Grid.Row="0" VerticalScrollBarVisibility="Auto"> 
      <StackPanel x:Name="Control1" Background="Red"> 
       <TextBlock Text="1.1"/> 
       <TextBlock Text="1.2"/> 
       <TextBlock Text="1.3"/> 
       <TextBlock Text="1.4"/> 
       <TextBlock Text="1.5"/> 
      </StackPanel> 
     </ScrollViewer> 
     <ScrollViewer x:Name="Scroll2" Grid.Row="1" VerticalScrollBarVisibility="Auto"> 
      <StackPanel x:Name="Control2" Background="Green"> 
       <TextBlock Text="2.1"/> 
       <TextBlock Text="2.2"/> 
       <TextBlock Text="2.3"/> 
       <TextBlock Text="2.4"/> 
       <TextBlock Text="2.5"/> 
       <TextBlock Text="2.6"/> 
       <TextBlock Text="2.7"/> 
       <TextBlock Text="2.8"/> 
       <TextBlock Text="2.9"/> 
       <TextBlock Text="2.10"/> 
      </StackPanel> 
     </ScrollViewer> 
    </Grid> 
</Canvas> 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     this.SizeChanged += MainWindow_SizeChanged; 
     Control1.SizeChanged += MainWindow_SizeChanged; 
     Control2.SizeChanged += MainWindow_SizeChanged; 
    } 

    private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e) 
    { 
     UpdateScrollHeight(); 
    } 

    private void UpdateScrollHeight() 
    { 
     double overallHeight = OverallCanvas.ActualHeight; 
     double c1Height = Control1.ActualHeight + Control1.Margin.Top + Control1.Margin.Bottom; 
     double c2Height = Control2.ActualHeight + Control2.Margin.Top + Control2.Margin.Bottom; 

     if (overallHeight - c1Height - c2Height < 0) 
     { 
      double halfHeight = overallHeight/2; 
      double c1Additional = Math.Max(0, halfHeight - c2Height); 
      double c2Additional = Math.Max(0, halfHeight - c1Height); 
      Scroll1.MaxHeight = halfHeight + c1Additional; 
      Scroll2.MaxHeight = halfHeight + c2Additional; 
     } 
     else 
     { 
      Scroll1.MaxHeight = double.PositiveInfinity; 
      Scroll2.MaxHeight = double.PositiveInfinity; 
     } 
    } 
} 

我只使用畫布來測量窗口內可用的大小,這可以做不同的以及...