2013-02-13 10 views
5

Wie andere habe ich ein DataGrid, das keine Bildlaufleisten anzeigt. Was ich meiner Meinung nach einzigartig finde, ist, dass ich kein StackPanel irgendwo im visuellen oder logischen Baum sehe. Ich benutze WPF Inspector, um die Bäume zu sehen. Ich habe verschiedene Vorschläge ausprobiert, um die Höhe und Breite der enthaltenen Rasterspalten und Zeilen ohne Erfolg zu setzen. Ich bin mir sicher, dass etwas fehlt, das den Inhalt über den sichtbaren Bereich hinaus erweitert, aber ich kann nicht sagen, was es ist. Jede Hilfe wäre willkommen. Diese Anwendung ist eine WPF-Prism mit MEF-App und das DataGrid befindet sich in einem UserControl, das sich in einer Prism-Region befindet.WPF DataGrid zeigt keine Bildlaufleisten und keinen sichtbaren Bereich

Shell Fenster XAML:

<Window> 
    <Grid x:Name="GridOuterShell"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <ribbon:Ribbon Grid.Row="0" > 
     ... 
    </ribbon:Ribbon> 

    <Grid x:Name="GridShellContent" Grid.Row="1"> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="350" MinWidth="300"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 


     <local:RegionBorderControl Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" Margin="2,2,8,2" RegionName="{Binding MainRegionDisplayName}" 
           Style="{DynamicResource RegionBorderControlStyle}"> 
     <ContentControl prism:RegionManager.RegionName="MainRegion" 
         VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch"/> 

     </local:RegionBorderControl> 


     <GridSplitter Grid.Row="0" Grid.Column="1" Grid.RowSpan="3" HorizontalAlignment="Center" VerticalAlignment="Stretch" 
        Width="3" ShowsPreview="True" ResizeDirection="Columns" /> 

     <local:RegionBorderControl Grid.Row="0" Grid.Column="2" RegionName="{Binding RightTopRegionDisplayName}" 
           Style="{DynamicResource RegionBorderControlStyle}"> 
     <ContentControl prism:RegionManager.RegionName="RightTopRegion" 
         VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch"/> 

     </local:RegionBorderControl> 

     <GridSplitter Grid.Row="1" Grid.Column="3" HorizontalAlignment="Stretch" VerticalAlignment="Center" 
        Height="3" ShowsPreview="true" ResizeDirection="Rows" ResizeBehavior="PreviousAndNext" Background="Silver"/> 

     <local:RegionBorderControl Grid.Row="2" Grid.Column="2" RegionName="{Binding RightBottomRegionDisplayName}" 
           Style="{DynamicResource RegionBorderControlStyle}"> 
      <ContentControl prism:RegionManager.RegionName="RightBottomRegion"/> 

     </local:RegionBorderControl> 

    </Grid> 

    <StatusBar Grid.Row="2"> 
     ... 
    </StatusBar> 

    </Grid> 
</Window> 

Usercontrol XAML:

<UserControl> 

<Grid x:Name="GridMain"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition /> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 

     <DockPanel Grid.Row="0" LastChildFill="False" HorizontalAlignment="Stretch" Width="Auto" > 
      <ToolBar x:Name="tbToolBar" DockPanel.Dock="Left" Background="{x:Null}"> 
       ... 
      </ToolBar> 
     </DockPanel> 

     <DataGrid AutoGenerateColumns="False" Grid.Row="2" Name="DataGridList" ItemsSource="{Binding MyItems}" IsReadOnly="True" CanUserResizeRows="False" SelectionMode="Single" 
        SelectedItem="{Binding Path=SelectedDataGridRecord, Mode=TwoWay}" Style="{StaticResource DataGridDefault}" > 
      <DataGrid.Columns> 
       ... 
      </DataGrid.Columns> 
     </DataGrid> 

    </Grid> 

Antwort

14

Sie haben das Datagrid in einer Grid-Zeile, in der RowDefinition Höhe Auto ist so wird das Gitter mit gemessen werden eine unendliche Höhe und zu seiner DesiredSize.Height angeordnet werden und nie Scrollbalken anzeigen. Scheint so, als ob das Gitter in Zeile 1 sein sollte oder die Höhe von Zeile 2 auf * anstatt auf Auto setzen sollte.

+0

Das hat mein Problem gelöst. Danke, Andrew. Ich hätte schwören können, dass ich es versucht habe. Es tut mir leid, dass ich so eine offensichtliche Aufsicht hatte, aber ich war ziemlich sicher, dass es so etwas war, da nichts anderes Sinn ergab. – David