2016-03-22 9 views
0

i wpf/C# bin lernen und anzuwenden, was ich über die differents wpf Layout gelernt habe ich versucht, eine einfache Mitarbeiter Liste/Details Fenster zu bauen, aber ich habe ich wenig Probleme:Wpf Listbox größer als die windos

die Listbox ist in der Höhe größer ist als die Höhe der Fenster, und anstatt eine Scrollbar hinzugefügt wird, wird der Rest des Elements zeigt nicht (einige Elementhälften Show sind)

hier ist ein Bild:

enter image description here

und hier ist das Xaml:

<Window x:Class="elexim.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:elexim" 
     mc:Ignorable="d" 
     Title="MainWindow"> 

    <StackPanel Orientation="Vertical"> 
     <Label HorizontalAlignment="Center">Employés </Label> 
     <Separator Margin="20,0,0,0"/> 

     <Grid Margin="0,20,0,0"> 

      <Grid.RowDefinitions> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 

      <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
      </Grid.ColumnDefinitions> 

      <GroupBox Header="Liste Employés" Margin="20,0,0,0"> 

       <ListBox> 
        <ListBox.ItemsPanel> 
         <ItemsPanelTemplate> 
          <UniformGrid Columns="3"/> 
         </ItemsPanelTemplate> 
        </ListBox.ItemsPanel> 

        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
        <local:employeeInfo/> 
       </ListBox> 
      </GroupBox> 

      <GroupBox Header="Detail Employé" Margin="20,0,0,0" Grid.Column="1"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="auto"/> 
         <RowDefinition Height="auto"/> 
         <RowDefinition Height="auto"/> 
         <RowDefinition Height="auto"/> 
        </Grid.RowDefinitions> 

        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="auto"/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 

        <Label Margin="10">Nom</Label> 
        <TextBox Grid.Column="1" VerticalAlignment="Center"/> 

        <Label Grid.Column="0" Grid.Row="1" Margin="10">Age</Label> 
        <TextBox Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"/> 

        <Label Grid.Column="0" Grid.Row="2" Margin="10">Salaire</Label> 
        <TextBox Grid.Row="2" Grid.Column="1" VerticalAlignment="Center"/> 

        <StackPanel Orientation="Horizontal" Grid.Column="0" 
           Grid.Row="3" Grid.ColumnSpan="2" 
           HorizontalAlignment="Right"> 
         <Button Margin="10" MinWidth="100">Valider</Button> 
         <Button Margin="10" MinWidth="100">Annuler</Button> 
        </StackPanel> 

       </Grid> 


      </GroupBox> 
     </Grid> 

    </StackPanel> 

</Window> 

wie kann ich die Listbox eine Scrollbar statt der aktuellen Effekt hinzufügen machen?

+1

Problem ist die vertikale Haupt 'StackPanel' . Es erlaubt, vertikal so viel zu wachsen, wie sie wollen. Ersetze es mit 'Grid' oder' DockPanel' – dkozl

+0

@dkozl gibt es keine Möglichkeit, StackPanel zu benutzen und die Größe auf die Fenstergröße zu beschränken? – karim

+0

Sie können die Größe von 'StackPanel' begrenzen, aber nur den sichtbaren Teil. Das vertikale 'StackPanel' gibt seinen Kindern immer eine unendliche Höhe. Analog wird das gleiche mit der Breite und dem horizontalen 'StackPanel' passieren. So soll 'StackPanel' funktionieren – dkozl

Antwort

2

Verwenden Sie einfach anstelle Grid von StackPanel:

mir ein Beispiel zeigen lassen:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Label HorizontalAlignment="Center">Employés </Label> 
    <Separator Grid.Row="1" Margin="20,0,0,0"/> 

    <Grid Grid.Row="2" Margin="0,20,0,0"> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 

     <GroupBox Header="Liste Employés" Margin="20,0,0,0"> 

      <ListBox> 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <UniformGrid Columns="3"/> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 

       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
       <local:employeeInfo/> 
      </ListBox> 
     </GroupBox> 

     <GroupBox Header="Detail Employé" Margin="20,0,0,0" Grid.Column="1"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="auto"/> 
        <RowDefinition Height="auto"/> 
        <RowDefinition Height="auto"/> 
        <RowDefinition Height="auto"/> 
       </Grid.RowDefinitions> 

       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="auto"/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 

       <Label Margin="10">Nom</Label> 
       <TextBox Grid.Column="1" VerticalAlignment="Center"/> 

       <Label Grid.Column="0" Grid.Row="1" Margin="10">Age</Label> 
       <TextBox Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"/> 

       <Label Grid.Column="0" Grid.Row="2" Margin="10">Salaire</Label> 
       <TextBox Grid.Row="2" Grid.Column="1" VerticalAlignment="Center"/> 

       <StackPanel Orientation="Horizontal" Grid.Column="0" 
          Grid.Row="3" Grid.ColumnSpan="2" 
          HorizontalAlignment="Right"> 
        <Button Margin="10" MinWidth="100">Valider</Button> 
        <Button Margin="10" MinWidth="100">Annuler</Button> 
       </StackPanel> 

      </Grid> 


     </GroupBox> 
    </Grid> 

</Grid> 

oder setzen Sie StackPanel innerhalb von ScrollViewer:

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
    <StackPanel ... /> 
</ScrollViewer> 
+1

bereits verwendet danke – karim