2012-12-25 7 views
36

Dodałem DockPanel do elementu RadioButton w taki sposób, że mogę dystrybuować etykietę przycisku radiowego, pole tekstowe i przycisk w poziomie, używając 100% szerokości.WPF: Jak mogę rozciągnąć środkowe dziecko w DockPanel?

Używanie LastChildFill="True" w DockPanel rozciąga ostatni element. To działa ładnie, jeśli pole tekstowe jest ostatnim dzieckiem w panelu. Ale ponieważ przycisk jest ostatnim elementem i ma stałą szerokość, pole tekstowe powinno zostać rozciągnięte. Jednak nie ma takiej własności, jak 2ndChildFill="True".

Mój kod wygląda następująco:

<RadioButton HorizontalAlignment="Stretch" 
             HorizontalContentAlignment="Stretch"> 
     <DockPanel > 
      <TextBlock VerticalAlignment="Center">in location:</TextBlock> 
      <TextBox Grid.Column="1" Margin="10,0,0,0">Path string</TextBox> 
      <Button HorizontalAlignment="Right" 
        Margin="10,0,0,0" Padding="3,0">...</Button> 
     </DockPanel> 
    </RadioButton> 

I to daje mi to:

wpf screenshot

pomysłów, podpowiedzi, aby rozwiązać ten problem? Wiele z góry dzięki ...

+2

Dlaczego nie wykorzystać siatkę zamiast? Siatka z 3 kolumnami z drugim zestawem na * szerokość i inne ustawione na auto – Charleh

+1

Tak, to może działać. Wygląda jednak na trochę przesadzonego. Czy DockPanel-Solution nie byłby bardziej elegancki? Nie potrzebuje wszystkich tych definicji kolumn. – brgn

Odpowiedz

45

Musisz ustawić DockPanel.Dock załączony właściwość dla elementów i pozostawić TextBox jako ostatni element:

<RadioButton HorizontalAlignment="Stretch" 
      HorizontalContentAlignment="Stretch"> 
    <DockPanel> 
     <TextBlock DockPanel.Dock="Left" 
        VerticalAlignment="Center" 
        Text="in location:" /> 
     <Button DockPanel.Dock="Right" 
       Margin="10,0,0,0" 
       Padding="3,0" 
       Content="..." /> 
     <TextBox Margin="10,0,0,0"> 
      Path string 
     </TextBox> 
    </DockPanel> 
</RadioButton> 
+3

Tytuł pytania wymieniony jako "środkowy", a odpowiedź przenosi go na "ostatni". Dlaczego więc nie ma lepszej odpowiedzi? –

+9

Pole tekstowe będzie nadal renderowane w środku, ze względu na atrybuty DockPanel.Dock. Przeniesienie go na ostatnią pozycję w dokumencie XML sprawia, że ​​WPF przyznaje kontrolce pełną pozostałą przestrzeń kontrolki nadrzędnej. –

+0

Próbowałem tego, ale wkręca mój taborder! Ponieważ WPF przypisuje domyślny indeks tabulatorów według kolejności w xaml, lepiej nie przesuwać elementu. – aliceraunsbaek

Powiązane problemy