2009-10-26 19 views
11

Etykiety w poniższym przykładzie (WPF/XAML) po prostu paradują poza ekranem, nie występuje owijanie. Usunięcie orientacji działa, ale nie zapewnia wymaganej funkcjonalności/wyglądu. Jakieś pomysły na zawijanie WrapPanel do bieżącego rozmiaru ?WrapPanel nie owija się, gdy znajduje się w StackPanel z orientacją poziomą

<Window Height="300" Width="600"> 
    <StackPanel Orientation="Horizontal"> 
     <WrapPanel> 
      <Label Height="28" Name="label1" Width="120">First Name</Label> 
      <Label Height="28" Name="label2" Width="120">John</Label> 
      <Label Height="28" Name="label3" Width="120">Last Name</Label> 
      <Label Height="28" Name="label4" Width="120">Smith</Label> 
      <!-- ...more labels!... --> 
     </WrapPanel> 
     <!-- ...other controls/panels... --> 
    </StackPanel> 
</Window> 

Odpowiedz

21

można powiązać WrapPanel 's MaxWidth do StackPanel' s ActualWidth.

+0

Kiedy mówisz "wiązanie", brzmi tak, jakby działo się to automatycznie? Jak to zrobić? – derGral

+4

Nie próbowałem tego, ale w zasadzie: NotDan

+0

To wydaje się działać; dzięki! Problem polega na tym, że są inne rzeczy w Stackpanel i ich szerokości nie są brane pod uwagę. Jakieś pomysły na takie rozwiązanie? – derGral

6

Co robisz nie jest możliwe ze względu na algorytm, który StackPanel używa robiąc układ poziomy. Zasadniczo poprosi każdy element dziecka o to, jak duże ma być i ile miejsca domaga się, aby je podarował.

Będziesz albo trzeba:

  1. Ustaw Width lub MaxWidth na WrapPanel.
  2. Użyj zewnętrznego panelu w miejsce WrapPanel w miejsce StackPanel.