Frage

Ich möchte ein Datagrid in einem HeaderedContentControl platzieren, aber das Datenraster nicht eine vertikale Scrollbar bekommen. Es scheint, alle Zeilen bemessen zu sein, auf einmal aus dem Blickfeld, den Boden verschwindenden zu halten.

Wenn ich die gleiche Datagrid in einem Grenzort elelemnt ich das Verhalten bekommen ich will.

Ich habe es auf dieses minimal Beispiel reduziert:

<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>

Ein paar Anmerkungen:

War es hilfreich?

Lösung

Sie sehen diese Verhalten, weil die Standardvorlage für HeaderedContentControl eine StackPanel mit seinem Inhalt zu zeigen. Da die StackPanel die Größe seiner Kinder nimmt, dehnt sich die DataGrid seine Höhe auf dem Bildschirm ohne Scrollbalken gezeigt jedes seiner Elemente zu haben. Die Anzeige wird dann aufgrund der Größe der HeaderedContentControl abgeschnitten.

die Vorlage Ändern ein Grid zu verwenden oder ein DockPanel löst dieses Problem:

<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>
scroll top