2012-02-07 10 views
0

ListView(ScrollViewerでラップされています)を取得しました。これは、要素のinseretdが親の最大高さに達するまで可視領域を超えた場合にサイズを変更します。WPFのレイアウトを理解する

ListViewは次のように埋め込まれています。

<Window ... SizeToContent="Height"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="2*"/> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="3*" /> 
      <ColumnDefinition Width="2*" />        
     </Grid.ColumnDefinitions> 

     <ScrollViewer x:Name="MyScrollViewer" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
      <ListView Name="MyListView" 
         ItemsSource="{Binding Path=RetrievalStringResults, Mode=OneWay}" 
         IsSynchronizedWithCurrentItem="True" /> 
     </ScrollViewer> 

     <DockPanel Grid.Row="0" Grid.Column="1"> 
     ... 
     </DockPanel> 

     <Expander Grid.Row="1" Grid.ColumnSpan="2"> 
      <DockPanel Height="150" HorizontalAlignment="Stretch"> 
       <TextBox DockPanel.Dock="Top" /> 
      </DockPanel> 
     </Expander> 

     <DockPanel Grid.Row="2" Grid.ColumnSpan="2"> 
     ... some buttons 
     </DockPanel> 
    </Grid> 
</Window> 

私はオンデマンドで拡張されなければならパンダに包まれた下、上のテキストボックスを得たので、私はSizeToContentを使用し、実際にそれゆえ私のメインウィンドウはサイズを変更する必要があります。これは実際に正常に動作します。

問題は、ListViewの高さが起動時の最大高さではないため、「自動サイズ変更」効果が得られたためです。

この影響を避けるために、ListViewの高さを親の高さの最大値に設定するにはどうすればよいですか?

さらに一般的な問題です。私は静的なレイアウトパラメータ(高さ/幅の静的な値)を避けるのがいいと思いますが、私は自分のUIコントロールに対するコントロールを失っていると感じています。

私のメインウィンドウの高さを手動で高さを変更して認識しましたが、これを避けるためにExpanderがラップしたDockPanelの高さ150で "ジャンプ"します。

ダイナミックUIレイアウトではどのようなものがありますか?私はStackPanelよりも周辺のコンロールにサイジングする際に、より動的にDockPanelを調べました。しかし、私はそれがすべてではないと思います。

+0

一度に1つ質問してください。 – svick

答えて

2

私はあなたのグリッドは、これが一番上の行は、行2と3の2倍のサイズであることを行っていることを意味

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="2*"/> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    ... 

</Grid> 

定義、その一番上の行のみの50%を取るだろうとあなたの問題があると思いますスペースが25%のスペースを占めます。

一番上の行がすべての空き領域を占めるようにするには、それが唯一の*サイズ行であることを確認し、他の行をAutoに設定して、必要なスペースを占有するようにします。

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    ... 

</Grid> 
関連する問題