2012-08-01 23 views
13

En XAML, ¿cómo lo hacen posible cambiar el tamaño de los controles o porciones de una pantalla de la forma en que los diferentes paneles como la caja de herramientas, el Explorador de soluciones o lista de errores en Visual Studio puede ser tomado y cambiar el tamaño?¿Controles WPF de tamaño variable?

En este ejemplo maquillada. . .

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

. . . Tengo un DockPanel con un ScrollView acoplado a la izquierda, un ListBox acoplado en la parte inferior y un TextBlock en la parte superior. ¿Hay alguna manera de adjuntar controladores de cambio de tamaño a estos para lograr el mismo efecto, o hay algún otro control en el que puedan incrustarse? Como dije, lo anterior es solo un ejemplo inventado para experimentar, no me importa si uso esos controles exactos.

Encontré un ejemplo de agregar controladores de cambio de tamaño usando Adorner en MSDN pero involucraba más de 170 líneas de código C#, así que antes de adoptar eso quería estar seguro de que no había una forma intrínseca de lograr esto en XAML.

Gracias de antemano.

Respuesta

11

No los controles exactos que solicitó, pero una muestra. Necesita un divisor y lo que está a cada lado * y el tramo de control contenido.

<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

¿Por qué se establece la anchura de la segunda 'ColumnDefinition' para auto? Esto hace que el 'GridSplitter' se vuelva redimensionable. – DdW

+0

@DdW ¿De verdad? ¿Has probado esto? – Paparazzi

+1

sí ... en combinación con '*' en los otros dos, mantiene los otros dos del mismo tamaño, mientras cambia el tamaño del 'GridSplitter'. Mi consejo: mantener el ancho fijo (3 o 5 píxeles o menos) tanto en el '' GridSplitter' y su ColumnDefinition' – DdW

Cuestiones relacionadas