2013-02-18 13 views
6

Sterowanie siatką WPF z 3 rzędami i 3 kolumnami. Wysokość danego rzędu jest ustawiona na Auto. W pierwszych dwóch komórkach mam dwie kontrolki o dynamicznych wysokościach. W trzeciej komórce mam inną kontrolę, którą chcę automatycznie ustawić, aby rozciągała się w komórce siatki. Próbowałem już VerticalAlignment="Stretch", ale to po prostu ustawia Wysokość Rzędu Gridowego równą wysokości kontrolnej. Jakie są moje opcje tutaj?WPF: Ustaw wysokość kontrolną, aby wypełnić wysokość wiersza siatki

Odpowiedz

7

Nie wiem, jakiego rodzaju kontroli używasz w komórce 3, ale większość elementów sterujących WPF automatycznie się rozciągnie, aby zmieścić się w komórce siatki. Wysokość wiersza siatki będzie ustawiona przez wysokość elementów sterujących w komórkach 1 i 2.

Jeśli używasz niestandardowego sterowania, w którym domyślne zachowanie dla wysokości jest inne, możesz ustawić wartość Height="Auto".

Jeśli to nie działa albo można zrobić wiązania danych, aby uzyskać rzeczywistą wysokość kontrolę w każdej komórce 1 lub 2. Ustaw właściwość kontrolą Height w komórki 3 do następujących:

Height="{Binding ActualHeight, ElementName=MyControlNameFromCell1, Mode=OneWay}" 

EDIT

inny sposób, który może być bardziej wydajny jest przeprowadzenie wiążącej na wysokość rzędu danych. Dlatego zamiast używać "Auto" dla wysokości wiersza, użyj powiązania danych pokazanego powyżej.

+0

Dzięki. Kontrola w komórce 3 to TabControl, podczas gdy komórki 1 i komórka 2 mają w nich siatki. Problem polega na tym, że zawartość TabControl (a więc i samego TableControl) jest większa niż obie siatki, więc cały wiersz zajmuje wysokość TabControl. Zamiast tego chciałbym, aby TabControl wziął wysokość kratek (większy z nich) i wprowadził w siebie pasek przewijania, aby odsłonić całą jego zawartość. Dodałem już ScrollViewer do TabControl, ale ponieważ TabControl staje się wystarczająco duży, aby pokazać całą jego zawartość, ScrollViewer pozostaje bezużyteczny. – dotNET

+0

Wiązanie również nie działa. Aktualizacja: – dotNET

+0

. Wiązanie faktycznie działa. Problem polegał na tym, że w właściwościach TabControl miałem Margin = "3", co spowodowało, że stał się tak duży, jak wymaga tego jego zawartość. Usunięcie Marginesu i dodanie wspomnianego wyżej wiązania Wysokości wydaje się zdziałać. – dotNET

Powiązane problemy