2009-07-11 24 views

risposta

25

Viewbox è molto utile se è necessario ridimensionare il contenuto della finestra in modo proporzionale quando si ridimensiona la finestra (ad esempio ingrandirla). In questa pagina minimalista

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Viewbox> 
     <StackPanel> 
      <TextBlock FontSize="14">Example</TextBlock> 
      <Border Background="Aqua" Width="100" Height="100"></Border>      
     </StackPanel> 
    </Viewbox> 
</Window> 

si dispone di un TextBlock e un bordo colorato impilati verticalmente; se avvii questo xaml la finestra avrà una dimensione di 300x300, il carattere di TextBlock avrà 14 dimensioni e il bordo colorato sarà 100x100. Se ridimensionate la finestra, vedrete sia il TextBlock che la scala Border di conseguenza (quindi non saranno più delle dimensioni che avete specificato in xaml), mantenendo le proporzioni relative. Viewbox è davvero utile, a questo riguardo, se hai bisogno di una finestra la cui configurazione dei componenti interni sia sempre la stessa indipendentemente dalla risoluzione finale che verrà visualizzata (ciò che conta è l'aspect ratio, pensato). Questo ovviamente funziona con tutti i contenuti che inserirai nella Viewbox (abbiamo avuto un'applicazione con video e viste 3D, ad esempio). Nota che in Visual Studio 2008 non sarai in grado di vedere il contenuto della Viewbox in Designer.

Spero che questo aiuto.

+0

Sto setacciando internet per l'eternità cercando questo <. < –

0

Do vuoi dire che vuoi che la finestra riempia l'intero schermo? Il modo più semplice per farlo (senza causare ulteriori mal di testa) è massimizzare la finestra.

w.WindowState = WindowState.Maximized; 

EDIT:

Un layout finestra scalabile richiede di evitare usando l'editor XAML in Visual Studio! In realtà puoi farlo nell'editor, ma è molto difficile.

molto più facile scrivere il codice XAML a mano:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 

    <Label Grid.Column="0" Grid.Row="0">First Name</Label> 
    <TextBox Grid.Column="1" Grid.Row="0" Name="firstName">Fred</TextBox> 
    <Label Grid.Column="0" Grid.Row="1">First Name</Label> 
    <TextBox Grid.Column="1" Grid.Row="1" Name="lastName">Smith</TextBox> 
</Grid> 

queste dimensioni per adattarsi alla finestra, anche se può sembrare strano, come le righe e le colonne di default a metà dello spazio ciascuno. È possibile ignorare questo in modo da avere un'altezza determinata dal loro contenuto, invece:

<RowDefinition Height="Auto"/> 

Può anche aiutare a mettere margini su alcuni controlli, a loro lo spazio fuori:

<TextBox Grid.Column="1" Grid.Row="1" Margin="6" Name="lastName">Smith</TextBox> 
+0

oh no vorrei che questo fosse il mio problema ... voglio che il contenuto si riduca alle dimensioni della finestra. –

+0

non sto lavorando con l'editor ... non mi hai capito, voglio che il contenuto cresca ... non si diffonda .. –

+0

Dovrai modificare la tua domanda, penso. Vuoi dire che vuoi davvero ingrandire tutti i dettagli, anche le dimensioni dei caratteri? –

2

Se si desidera ridimensionare davvero tutto compreso le dimensioni dei caratteri, potresti probabilmente applicare una trasformazione di scala al tuo contenuto e associare i suoi valori X e Y alla larghezza e all'altezza della finestra. Avresti anche bisogno di un convertitore di valore per convertirli nella scala appropriata.

+0

come faccio questo in mvvm? ho uno stile per tutti i miei vms .. voglio fare la scala .. –

1

Se si desidera ridimensionare tutto alla dimensione della finestra, è sufficiente mettere tutto in un controllo Viewbox.

Problemi correlati