2009-05-08 14 views
11

グリッドには数行あります。一番上の行には、コレクションに動的にバインドされ、DataTemplateSelectorとItemsPanelTemplate(水平に配置された単一のWrapPanel)を使用するItemsControlがあります。ここで私がこれまで持っているものの機能縮小版です:グリッド行の高さをWPFの内容にバインドします。

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="40" /> 
     <RowDefinition Height="2" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <GridSplitter Background="#666" Grid.Row="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    <ItemsControl x:Name="items" Background="#DDD" Grid.Row="0" ItemTemplateSelector="{StaticResource itemTemplateSelector}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Grid> 

代わりの40に最初の行の高さという設定が、私はItemsControlには、合わせてでなければならない最小の高さに基づいて動的に設定したいのですがすべての内容ItemsControlの高さはGrid Rowの高さによって制約されているので、どの要素をバインドするべきか、どの要素のプロパティにバインドする必要があるのか​​分かりません。

グリッド行の高さをItemsControlの「望ましい高さ」にバインドすることは理にかなっています。だから、DesiredSizeプロパティを見つけて、RowDefinitionのHeightをItemsControlのDesiredSize.Heightにバインドしました。これは最初にロードされたときに機能しますが、コントロールのサイズを変更すると更新されません(ItemsPanelTemplateとしてWrapPanelを使用しているため、ウィンドウのサイズを変更するとItemsControlの高さが変更されるはずです)。

このような状況がバインディングフレームワークでもサポートされているかどうかは知っていますか?これを達成するにはイベントハンドラコードを追加する必要がありますか?

ありがとうございました。

答えて

30

あなたが望むものを達成するためにオートに高さを設定してみてくださいました:

<RowDefinition Height="Auto"/> 

+0

うん...時々簡単な解決策はただあなたをエスケープ(または私はここで単純すぎる考えています..?) 。ありがとう – Rich

関連する問題