2012-08-01 7 views
13

Wie kann ich in XAML die Größe von Steuerelementen oder Teilen eines Bildschirms so ändern, wie die verschiedenen Bereiche wie Toolbox, Projektmappen-Explorer oder Fehlerliste in Visual Studio gepackt und in der Größe angepasst werden können?Benutzerdefinierbare WPF-Steuerelemente?

In diesem erfundenen Beispiel. . .

<Window x:Class="UI_Experiments_1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <DockPanel x:Name="Tab3DockPanel" Background="#FFA0FFA0" LastChildFill="True"> 
     <ScrollViewer DockPanel.Dock="Left" Background="Lavender"> 
      <TextBlock Height="60" TextWrapping="Wrap" Background="#FFFFDDDD" Width="140"> 
        ScrollViewer - DockPanel.Dock="Left" 
      </TextBlock> 
     </ScrollViewer> 
     <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center" 
       TextWrapping="Wrap" Background="LemonChiffon"> 
       DockPanel.Dock="Top" HorizontalAlignment="Center" 
     </TextBlock> 
     <ListBox DockPanel.Dock="Right" Background="#FFCCEEFF"> 
       ListBox DockPanel.Dock="Bottom" 
     </ListBox> 
    </DockPanel> 
</Window> 

. . . Ich habe ein DockPanel mit einer links angedockten ScrollView, einer unten angedockten ListBox und einem oberen Textblock. Gibt es eine Möglichkeit, Größenänderungs-Handles an diese anzuhängen, um den gleichen Effekt zu erzielen, oder gibt es ein anderes Steuerelement, in das diese eingebettet werden können? Wie ich bereits sagte, ist das Obige nur ein erfundenes Beispiel, mit dem man experimentieren kann - es ist mir egal, ob ich diese genauen Kontrollen verwende.

Ich habe ein Beispiel für das Hinzufügen von Größenanpassungen mit einem Adorner auf MSDN gefunden, aber es umfasste über 170 Zeilen C# -Code, also wollte ich sicher sein, dass es keine intrinsische Möglichkeit gab, dies in XAML zu erreichen.

Vielen Dank im Voraus.

Antwort

11

nicht die genaue Kontrollen Sie aber eine Probe gefragt. Brauchen Sie einen Splitter und was ist auf beiden Seiten * und die enthaltene Kontrollstrecke.

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="auto" /> 
     <ColumnDefinition Width="*" />  
    </Grid.ColumnDefinitions> 
    <TextBox Grid.Row="0" Grid.Column="0" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Text="TexBox" />  
    <GridSplitter Grid.Row="0" Grid.Column="1" Margin="2,0,2,0" 
        Width="3" Background="Purple" 
        VerticalAlignment="Stretch" 
        HorizontalAlignment="Center" /> 
    <ListView Grid.Row="0" Grid.Column="2" Background="Aqua" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch"/> 
</Grid> 
+0

Warum würden Sie die Breite der zweiten 'ColumnDefinition' auf auto einstellen? Dies bewirkt, dass der GridSplitter selbst in der Größe verändert werden kann. – DdW

+0

@DdW Wirklich? Hast du das getestet? – Paparazzi

+1

yep ... in Kombination mit dem '*' auf den anderen beiden, behält es die anderen beiden die gleiche Größe bei der Größenänderung des 'GridSplitter'. Mein Rat: Halten Sie die Breite fest (3 oder 5 Pixel oder so) auf dem 'GridSplitter' und seiner' ColumnDefinition' – DdW