2013-04-18 18 views
5

Ho un controllo utente in WPF con un DataGrid. Aggiungo questo controllo utente in una finestra all'interno di un oggetto Tab di TabControl. La barra di scorrimento verticale non diventa visibile. Ho ridimensionato la finestra e sembra che il controllo utente stia prendendo la sua altezza completa dopo aver considerato l'altezza di DataGrid.La barra di scorrimento verticale non è visibile nel datagrid all'interno di usercontrol nel wpf

Come visualizzare la barra di scorrimento verticale e mantenere l'altezza di DataGrid su Auto in base all'altezza disponibile come altezza del controllo utente e della finestra?

EDIT: finestra principale: Controllo

<Window> 
    <Grid> 
    <TabControl Name="tc" 
       SelectionChanged="tc_SelectionChanged"> 
     <TabItem Header="ABC"> 
     <local:uc1 /> 
     </TabItem> 
     <TabItem Header="DEF"> 
     <local:uc2 /> 
     </TabItem> 
    </TabControl> 
    </Grid> 
</Window> 

utente:

<UserControl> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="30"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <StackPanel Grid.Row="0" 
       Grid.Column="0" 
       Orientation="Vertical"> 
     <StackPanel Orientation="Horizontal"> 
     <Button>Add</Button> 
     <Button>Remove</Button> 
     <Button>Refresh</Button> 
     </StackPanel> 

     <Label Name="lblTopMessage">some message</Label> 

     <DataGrid Name="dg" 
       IsReadOnly="True"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}" 
           Header="Name" 
           Width="*"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding Value}" 
           Header="Value" 
           Width="130"></DataGridTextColumn> 
      <DataGridTextColumn Binding="{Binding List}" 
           Header="List" 
           Width="*"></DataGridTextColumn> 
     </DataGrid.Columns> 
     </DataGrid> 

    </StackPanel> 
    <Grid Grid.Row="0" 
      Grid.Column="1" 
      Name="gridTS"> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="100"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <TextBlock Name="lblNewSource" 
       Grid.Row="0" 
       Grid.ColumnSpan="2" 
       HorizontalAlignment="Center" 
       Padding="0 5 0 0" 
       FontWeight="Bold">New Source</TextBlock> 
     <TextBlock Grid.Row="1" 
       Grid.Column="0" 
       Padding="10 10 0 0">Name:</TextBlock> 
     <TextBlock Grid.Row="2" 
       Grid.Column="0" 
       Padding="10 10 0 0">Value:</TextBlock> 
     <TextBlock Grid.Row="3" 
       Grid.Column="0" 
       Padding="10 10 0 0">List:</TextBlock> 

     <TextBox Grid.Row="1" 
       Grid.Column="1" 
       Name="txtName" 
       IsEnabled="False"></TextBox> 
     <ComboBox Grid.Row="2" 
       Grid.Column="1" 
       Name="cbValue"></ComboBox> 
     <ListBox Grid.Row="3" 
       Grid.Column="1" 
       Name="lbList"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
      <CheckBox Margin="3 5 0 3" 
         Content="{Binding Name}" 
         IsChecked="{Binding IsActive}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
     </ListBox> 

     <Button Name="btnSave" 
       Click="btnSave_Click" 
       Grid.Row="4" 
       Grid.Column="1">Save</Button> 
     <TextBlock TextWrapping="WrapWithOverflow" 
       Name="lblMessage" 
       Grid.Row="5" 
       Grid.Column="1" 
       Margin="0 10 10 0"></TextBlock> 
    </Grid> 
    </Grid> 
</UserControl> 
+1

Probabilmente si desidera impostare del DataGrid [VerticalScrollBarVisibility] (http://msdn.microsoft.com/en-us/library/ system.windows.controls.datagrid.verticalscrollbarvisibility (v = vs.95) .aspx) a ** Visible ** ma è difficile da dire in base alle informazioni fornite. –

+0

Penso che mettere DataGrid all'interno dello StackPanel non sia una buona idea in questo caso.Non sarai in grado di utilizzare DataGrid con ScrollBars. – Dilshod

+0

possibile duplicato di [come posso abilitare le barre di scorrimento sul Datagrid WPF?] (Http://stackoverflow.com/questions/673516/how-can-i-enable-scrollbars-on-the-wpf-datagrid) – Dzyann

risposta

8

AGGIORNAMENTO: ho appena preso DataGrid di StackPanel. Prova questo codice:

<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="45.361"></RowDefinition> 
    <RowDefinition Height="102.639" /> 
    <RowDefinition Height="30"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="2*"></ColumnDefinition> 
    <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <StackPanel Grid.Row="0" 
       Grid.Column="0" 
       Orientation="Vertical"> 
    <StackPanel Orientation="Horizontal"> 
     <Button>Add</Button> 
     <Button>Remove</Button> 
     <Button>Refresh</Button> 
    </StackPanel> 

    <Label Name="lblTopMessage">some message</Label> 

    </StackPanel> 

    <DataGrid Grid.Row="1" 
      Name="dg" 
      IsReadOnly="True"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Name}" 
          Header="Name" 
          Width="*"></DataGridTextColumn> 
     <DataGridTextColumn Binding="{Binding Value}" 
          Header="Value" 
          Width="130"></DataGridTextColumn> 
     <DataGridTextColumn Binding="{Binding List}" 
          Header="List" 
          Width="*"></DataGridTextColumn> 
    </DataGrid.Columns> 
    </DataGrid> 

    <Grid Grid.Row="0" 
     Grid.Column="1" 
     Name="gridTS" 
     Grid.RowSpan="2"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="100"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <TextBlock Name="lblNewSource" 
       Grid.Row="0" 
       Grid.ColumnSpan="2" 
       HorizontalAlignment="Center" 
       Padding="0 5 0 0" 
       FontWeight="Bold">New Source</TextBlock> 
    <TextBlock Grid.Row="1" 
       Grid.Column="0" 
       Padding="10 10 0 0">Name:</TextBlock> 
    <TextBlock Grid.Row="2" 
       Grid.Column="0" 
       Padding="10 10 0 0">Value:</TextBlock> 
    <TextBlock Grid.Row="3" 
       Grid.Column="0" 
       Padding="10 10 0 0">List:</TextBlock> 

    <TextBox Grid.Row="1" 
      Grid.Column="1" 
      Name="txtName" 
      IsEnabled="False"></TextBox> 
    <ComboBox Grid.Row="2" 
       Grid.Column="1" 
       Name="cbValue"></ComboBox> 
    <ListBox Grid.Row="3" 
      Grid.Column="1" 
      Name="lbList"> 
     <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Margin="3 5 0 3" 
        Content="{Binding Name}" 
        IsChecked="{Binding IsActive}" /> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

    <Button Name="btnSave" 
      Grid.Row="4" 
      Grid.Column="1">Save</Button> 
    <TextBlock TextWrapping="WrapWithOverflow" 
       Name="lblMessage" 
       Grid.Row="5" 
       Grid.Column="1" 
       Margin="0 10 10 0"></TextBlock> 
    </Grid> 
</Grid> 

Spero che questo aiuti.

0

Impostare VerticalScrollBarVisibility a Visible.

<DaraGrid VerticalScrollBarVisibility="Visible" ... > 
... 
</DataGrid> 

Il valore predefinito è Auto.

UPDATE

Dopo aver guardato nel codice ho scoperto, che scrollbar visibility non è il tuo vero problema. Il tuo problema è DataGrid senza altezza fissa in StackPanel. Prende tutto lo spazio necessario per visualizzare tutti gli articoli in DataGrid e questo è il motivo per cui lo ScrollBar non era Visible. Come ho già detto valore predefinito per VerticalScrollBarVisibility è Auto e significa:

MSDN: Auto - Viene visualizzata una ScrollBar e la dimensione del ScrollViewer viene applicato al contenuto quando la finestra non è in grado di visualizzare tutti il contenuto.

4

Fai la barra di scorrimento verticale appaiono e ancora mantenere l'altezza del DataGrid automatico.
La risposta è NO.

Fintantoché l'altezza è automatica, essa crescerà come automatica, in modo da ottenere tutta l'altezza desiderata.

<RowDefinition Height="Auto"></RowDefinition> 

Se si desidera utilizzare lo spazio disponibile quindi utilizzare *

<RowDefinition Height="*"></RowDefinition> 
Problemi correlati