web-dev-qa-db-ja.com

WPFドックパネルの最初の子が残りのスペースを使用する

ウィンドウには、いくつかのファイルを指定するためのDockPanelsのリストがあります。各DockPanelには、TextBox(パス用)とボタン(ファイルを参照するため)があります。

ここで問題を明らかにするために、単純なWPFページを再作成しました。

<Page
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    Width="150"
    Height="22">
    <DockPanel>
        <TextBox HorizontalAlignment="Stretch"/> <!-- path to file -->
        <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
    </DockPanel>
</Page>

問題は、テキストボックスの右側にボタンが必要なことですが、DockPanelのLastChildが残りのスペースを使用するボタンであるため、テキストボックスが非常に小さくなります。シャッフルしてLastChildFill="False"を設定することでこれを変更しようとしましたが、ボタンが再び小さくなり、TextBoxが広くなりません(HorizontalAlignment="Stretch"でも)。

この順序でコントロールが必要な理由は、tabを使用してウィンドウ内を移動するときに、ユーザーがボタンの前のTextBoxに到達するようにするためです。 TabIndexの設定を調べましたが、ハッキーな感じがします。WPFのお気に入りの機能は、タブインデックスがXAMLで制御が定義されている順序になっていることです。言うまでもなく、ウィンドウ内のすべてに手動でTabIndexを設定する必要があります。

私には、TextBox.Horizo​​ntalAlignmentの設定が尊重されていないようです。 最初のコントロールでできるだけ多くのスペースを使用し、タブの順序を維持するにはどうすればよいですか?

32
Mizipzor

DockPanelの動作が必要ない場合は、DockPanelを使用しないでください。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <TextBox />
    <Button Content="..." Grid.Column="1"/>
</Grid>
27
John Bowen

このようにします:

<DockPanel LastChildFill="True">
    <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
    <TextBox DockPanel.Dock="Left" HorizontalAlignment="Stretch"/> <!-- path to file -->
</DockPanel>
39
Jonathan Barez