2011-09-07 7 views
8

Problema: quando si aggiunge una ScrollViwer attorno a una griglia, il ridimensionamento della griglia viene annullato!Perché il mio ScrollViewer distrugge il mio layout della griglia? WPF

Eksampel: Ho creato una griglia con 3 colonne, il coulymn 1. dovrebbe essere sempre 2 volte più grande delle colonne 2 e 3! Senza ScrollViewer è sempre vero, ma quando lo aggiungi consente a ciascuna colonna di decidere la propria dimensione.

<Window x:Class="alternatingGridRow.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="200" Width="Auto" Loaded="WindowLoaded"> 
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"> 
    <Grid x:Name="LayoutRoot" ShowGridLines="True"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" MinHeight="23" MaxHeight="60"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="1*"/> 
     </Grid.ColumnDefinitions> 
      <TextBlock HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" /> 
      <TextBlock Foreground="Red" Grid.Column="1" HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" /> 
    </Grid> 
</ScrollViewer> 

Come si può vedere chiaramente i fattori di scala sono completamente sbagliato! Dato che la 2. colonna è troppo grande! e la colonna 3. è una certa dimensione casuale ...

Wrong Scaling factors

Qualche consiglio su questo è ben ha ricevuto .... Saluti Martin

risposta

3

Ok Vedo il motivo per cui la colonna è tesa. Ma ... Ho pensato a una soluzione mentre leggevo i tuoi post ...

Come, ha detto Mohammed, impostare una larghezza fissa sulla mia griglia, beh .. Voglio che la mia griglia abbia la stessa larghezza di scrollviewer a meno che diventa piccolo, quindi voglio che lo scrollviewer abbia effetto! Quindi .. la mia soluzione è:

MinWidth="500" Width="{Binding ActualWidth, ElementName=scrollviewer}" 

<Window x:Class="alternatingGridRow.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="200" Width="Auto"> 
<ScrollViewer x:Name="scrollviewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"> 
    <Grid x:Name="LayoutRoot" ShowGridLines="True" MinWidth="500" Width="{Binding ActualWidth, ElementName=scrollviewer}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" MinHeight="23" MaxHeight="60"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="1*"/> 
     </Grid.ColumnDefinitions> 
      <TextBlock HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" /> 
      <TextBlock Foreground="Red" Grid.Column="1" HorizontalAlignment="Stretch" Text="sdasdasdasdsadsadasddasdck" TextWrapping="Wrap" VerticalAlignment="Top" /> 
    </Grid> 
</ScrollViewer> 

</Window> 

(fissati solo per orizzontale)

Thx.

+0

Felice di aver trovato la soluzione, non dimenticare di accettare una soluzione;) –

5

La configurazione attuale è sbagliato, perché il ScrollViewer non lo fa limitare la larghezza e l'altezza del suo bambino (cioè illimitato), inoltre, lo Grid riempie sempre tutto lo spazio orizzontale e verticale disponibile sul suo contenitore genitore, ed è per questo che si vede questo comportamento strano. È necessario eseguire una delle seguenti operazioni:

  1. , rimuovere lo ScrollViewer come indicato.
  2. oppure impostare un'altezza e una larghezza fisse per il tuo Grid.
5

Stai chiedendo alla griglia di assegnare una percentuale di spazio infinito a ciascuna colonna. Infinito perché lo scorrimento orizzontale è abilitato su ScrollViewer e l'intero punto di ScrollViewers è quello di virtualizzare lo spazio. Quindi quello che chiedi di fare non ha nemmeno senso.

Problemi correlati