2011-07-13 9 views
13

mam siatki z 3 kolumnami i 2 rzędachw WPF w jaki sposób mogę dokonać DataGrid dopasować wysokość okna

 <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="10"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

I dolna lewa komórka, mam siatki danych, z AutoGenerateColumns = True, które mogą załaduj wiele wierszy. Chciałbym, aby wysokość siatki danych została zmaksymalizowana, aby pasowała do okna, i aby użytkownik mógł korzystać z paska przewijania datagrid, aby przewijać wiersze w górę iw dół.

Co się dzieje, że DataGrid przepływy dolnej części okna, a nawet jeśli ustawić

ScrollViewer.VerticalScrollBarVisibility="Visible" 

DataGrid, pasek przewijania nie ma wpływu i wiersze płynąć w dół. W jakiś sposób datagrid nie wydaje się ograniczony ...

Co robić?

+1

Podanie jakiejś szerokości do siatki danych może rozwiązać Twój problem ... jeśli nie chcesz, aby szerokość kodu była duża, możesz zrobić pewien rodzaj wiązania elementu, aby to osiągnąć. .. – Bathineni

+0

Martwię się wysokością ... – GilShalit

+0

Przepraszam .. mówię o wysokości tylko .. jej literówka ... Podanie jakiejś wysokości do siatki danych może rozwiązać twój problem ... jeśli nie chcesz wysoka wysokość kodu, którą możesz zrobić o f powiązanie elementów, aby to osiągnąć .. – Bathineni

Odpowiedz

31

Spróbuj ustawić swoją DataGrid HorizontalAlignment=Stretch i VerticalScrollBarVisibility=Auto

Jeśli to nie zadziała, może trzeba powiązać siatki na wysokość do wysokości okna tak, że to nie auto rosnąć, aby dopasować jego zawartość. Zwykle używam Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ActualHeight}" (może to być RenderSize.ActualHeight zamiast tylko ActualHeight ... zapomniałem.

Inną alternatywą jest użycie DockPanel zamiast Grid od tej kontroli nie auto rosnąć, aby dopasować jego zawartość. Zamiast tego Wyciągnij swoje ostatnie dziecko, aby wypełnić pozostałe miejsce:

+0

ciekawych pomysłów. Dam im spróbować i zgłoś z powrotem :-) – GilShalit

+0

Technika wiązania działa jak wdzięk, Dzięki! A to ActualPath, jak pisałeś. BTW, jak powiązać coś z ułamkiem wartości ścieżki? Path = ActualPath/2 wydaje się nie działać. – GilShalit

+1

@Gilshalit Musisz użyć konwertera do tego – Rachel

1

Musisz zdefiniować kolumnę i wiersz, w którym DataGrid jest z *. Mówisz, że jest w dolnej lewej komórce. Wiersz jest ok, ale twoja kolumna ma Width="Auto".

Urządzenie AutoGenerateColumns=True powoduje bałagan, jeśli Width="Auto".

+0

Należy zauważyć, że spowoduje to, że poziomy pasek przewijania nie będzie wyświetlany, nawet jeśli ustawisz 'ScrollViewer.HorizontalScrollBarVisibility =" Auto "' – mauris

Powiązane problemy