2012-12-25 7 views
36

Ich habe einem RadioButton-Element ein DockPanel hinzugefügt, so dass ich die Optionsfeldbeschriftung, ein Textfeld und eine Schaltfläche horizontal mit 100% der Breite verteilen kann.WPF: Wie kann ich das mittlere Kind in einem DockPanel strecken?

Mithilfe von LastChildFill="True" im DockPanel wird das letzte Element gestreckt. Dies funktioniert gut, wenn das Textfeld das letzte untergeordnete Element im Bedienfeld ist. Da die Schaltfläche jedoch das letzte Element ist und eine feste Breite hat, sollte die Textbox gestreckt werden. Allerdings gibt es keine solche Eigenschaft wie 2ndChildFill="True".

sieht Ihr Code wie folgt aus:

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

Und es gibt mir dies:

wpf screenshot

Irgendwelche Ideen, um dies zu beheben Hinweise? Vielen Dank im Voraus ...

+2

Warum Sie kein Raster stattdessen verwenden? Grid mit 3 Spalten mit dem zweiten Set auf * width und den anderen auf auto gesetzt – Charleh

+1

Ja, das könnte funktionieren. Aber es sieht für mich ein bisschen überentwickelt aus. Wäre DockPanel-Lösung nicht etwas eleganter? Es benötigt nicht alle diese Spaltendefinitionen. – brgn

Antwort

45

Sie benötigen DockPanel.Dock angebracht Eigenschaft für Ihre Elemente zu setzen und TextBox als letztes Element verlassen:

<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

Der Titel der Frage erwähnt "Mitte", und die Antwort verschiebt es auf "zuletzt". Warum also keine bessere Antwort? –

+9

Die Textbox wird aufgrund der DockPanel.Dock-Attribute immer noch in der Mitte gerendert. Wenn Sie sie an die letzte Position im XML-Dokument verschieben, wird WPF das Steuerelement nur mit dem gesamten verbleibenden Speicherplatz des übergeordneten Steuerelements versehen. –

+0

Ich habe das versucht, aber es schraubt meine Taborder! Da WPF den Standardregisterkartenindex nach der Reihenfolge in xaml zuweist, wäre es vorzuziehen, das Element nicht zu verschieben. – aliceraunsbaek