2011-09-07 11 views
8

Problem: Dodanie wartości ScrollViW wokół skalowania Grid powoduje anulowanie skalowania!Dlaczego mój ScrollViewer niszczy mój układ siatki? WPF

Eksampel: Stworzyłem siatkę o szerokości 3 kolumny, 1. coulymn powinien zawsze być 2 razy większy niż kolumna 2 i 3! Bez programu ScrollViewer zawsze jest to prawda, ale podczas dodawania pozwala każdej z kolumn na określenie własnego rozmiaru.

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

Jak można wyraźnie zobaczyć współczynniki skalowania są całkowicie błędne! Ponieważ kolumna 2. jest droga do dużej! a kolumna 3. jest jakiś przypadkowy rozmiar ...

Wrong Scaling factors

Wszelkie porady na ten temat jest dobrze przyjęte .... Cheers Martin

Odpowiedz

3

OK Rozumiem, dlaczego rozmiar kolumn jest wkręcony.
Ale ... Pomyślałem o rozwiązaniu, gdy czytałem twoje posty ...

Jak powiedział Mohammed, ustaw stałą szerokość na mojej siatce, dobrze .. Chcę, żeby moja siatka miała taką samą szerokość jak przewijarka, chyba że robi się mały, potem chcę, żeby przeglądarka miała wpływ! Więc .. moje rozwiązanie to:

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> 

(ustalona tylko na poziomie)

Thx.

+0

Cieszę się, że znalazłeś rozwiązanie, nie zapomnij przyjąć rozwiązania;) –

5

Aktualna konfiguracja jest nieprawidłowa, ponieważ nie ScrollViewer ogranicz szerokość i wysokość swojego dziecka (tj. bez ograniczeń), ponadto Grid zawsze wypełnia całą dostępną przestrzeń poziomą i pionową dostępną na swoim kontenerze nadrzędnym, i dlatego widzisz to dziwne zachowanie. Musisz wykonać jedną z następujących czynności:

  1. albo usunąć ScrollViewer, jak wspomniano.
  2. lub ustaw stałą wysokość i szerokość dla swojej Grid.
5

Pytasz siatkę, aby przypisać procent nieskończonej przestrzeni do każdej kolumny. Nieskończone, ponieważ przewijanie w poziomie jest włączone w twoim ScrollViewerze, a cały punkt ScrollViewers polega na wirtualizacji przestrzeni. Więc to, o co prosisz, nie ma nawet sensu.

Powiązane problemy