4

DataGridをHeaderedContentControl内に配置したいのですが、DataGridが垂直スクロールバーを取得しません。すべての行を一度に保持できるサイズになっているようで、下部が表示されなくなります。

同じDataGridをBorderelelemntに配置すると、希望する動作が得られます。

私はそれをこの最小限の例に減らしました:

<Grid>
    <HeaderedContentControl  Margin="10,10,10,161" >
        <HeaderedContentControl.Header >test</HeaderedContentControl.Header>

        <!-- I want it Here but then no Vertical Scroll-->
        <DataGrid ItemsSource="{Binding Path=AllData}"                      
                  AutoGenerateColumns="True"  />
    </HeaderedContentControl>

    <Border Margin="10,169,10,10">                                
        <!--Here it does scroll -->
        <DataGrid ItemsSource="{Binding Path=AllData}" 
                  AutoGenerateColumns="True"  />
    </Border>                      
</Grid>

いくつかの注意:

  • HeaderedContentControl.VerticalContentAlignmentを使用して動作させることができませんでした
  • この問題はこの質問に関連していますが、私はそれを少し広げて、より良い答えがあると思います。
  • DataGridの周りでScrollViewerを使用すると、ヘッダーが見えなくなるため、解決策にはなりません。
  • WPF4を使用しています
4

1 に答える 1

6

のデフォルトテンプレートがその内容を表示HeaderedContentControlするためにを使用しているため、この動作が見られます。は子のサイズをとるStackPanelため、高さを拡張して、スクロールバーなしですべてのアイテムを画面に表示します。次に、のサイズに応じて表示がトリミングされます。StackPanelDataGridHeaderedContentControl

Gridまたはを使用するようにテンプレートを変更すると、DockPanelこの問題が解決します。

<Style TargetType="{x:Type HeaderedContentControl}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type HeaderedContentControl}">
        <DockPanel>
          <ContentPresenter DockPanel.Dock="Top" ContentSource="Header" />
          <ContentPresenter />
        </DockPanel>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
于 2010-06-19T21:41:41.897 に答える