2012-12-25 5 views
36

RadioButton要素にDockPanelを追加して、ラジオボタンラベル、テキストボックス、ボタンを幅の100%で水平に配布できるようにしました。WPF:DockPanelで中間の子供をどのように伸ばすことができますか?

DockPanel内でLastChildFill="True"を使用すると、最後の要素が引き伸ばされます。これは、テキストボックスがパネル内の最後の子である場合にうまく機能します。しかし、ボタンが最後の要素であり、幅が固定されているので、テキストボックスを引き伸ばす必要があります。しかし、2ndChildFill="True"のようなプロパティはありません。

私のコードは次のようになります。

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

そして、それは私にこの与える:任意のアイデアを

wpf screenshot

を、この問題を解決するヒント?あなたの要素に対してDockPanel.Dock添付プロパティを設定し、最後の要素として、TextBoxを残しておく必要があります事前に感謝...

+2

はなぜあなたの代わりにグリッドを使用していませんか? 2列目が*幅に設定され、他の列が自動に設定された3列のグリッド – Charleh

+1

うん、それはうまくいく可能性があります。しかし、それは私に少し強調されているように見えます。 DockPanel-Solutionはもう少しエレガントではないでしょうか?この列の定義はすべて必要ではありません。 – brgn

答えて

45

<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

質問のタイトルは「中」と答え、それを「最後」に移動します。だからなぜより良い答えはありませんか? –

+9

テキストボックスは、DockPanel.Dock属性のために中央に表示されます。 XMLドキュメントの最後の位置に移動するだけで、WPFは親コントロールの残りのスペース全体を制御することができます。 –

+0

私はこれを試しましたが、私のtaborderをねじ込みます! WPFはデフォルトのタブインデックスをxamlの順序で割り当てるので、要素を移動しないことが望ましいでしょう。 – aliceraunsbaek

関連する問題