2012-08-01 16 views
13

In XAML, come è possibile ridimensionare i controlli o le parti di un display in modo che i diversi pannelli come Toolbox, Solution Explorer o Error List in Visual Studio possano essere afferrati e ridimensionati?Controlli WPF ridimensionabili dall'utente?

In questo esempio inventato. . .

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

. . . Ho un DockPanel con una ScrollView ancorata a sinistra, un ListBox agganciato nella parte inferiore e un TextBlock in alto. C'è un modo per attaccare maniglie di ridimensionamento a questi per ottenere lo stesso effetto, o c'è qualche altro controllo in cui questi possono essere incorporati? Come ho già detto, quanto sopra è solo un esempio inventato per sperimentare - non mi interessa se uso quei controlli esatti.

Ho trovato un esempio di aggiunta di maniglie di ridimensionamento utilizzando un Adorner su MSDN ma riguardava più di 170 linee di codice C#, quindi prima di adottarlo volevo essere sicuro che non esistesse un modo intrinseco per ottenere ciò in XAML.

Grazie in anticipo.

risposta

11

Non i comandi esatti chiesto, ma un campione. Serve uno splitter e cosa c'è da entrambi i lati * e il tratto di controllo contenuto.

<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

Perché impostare la larghezza del secondo 'ColumnDefinition' su auto? Ciò fa sì che 'GridSplitter' diventi ridimensionabile. – DdW

+0

@DdW Davvero? Hai provato questo? – Paparazzi

+1

sì ... in combinazione con '*' negli altri due, mantiene gli altri due della stessa dimensione, mentre ridimensiona il 'GridSplitter'. Il mio consiglio: mantieni la larghezza fissa (3 o 5 pixel o più) sia su 'GridSplitter' che su' ColumnDefinition' – DdW

Problemi correlati