34

私が持っているウィンドウにはDockPanel、いくつかのファイルを指定する のリストがあります。各 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 の設定が尊重されていないようです。最初のコントロールで可能な限り多くのスペースを使用しながら、タブ オーダーを保持するにはどうすればよいですか?

4

2 に答える 2

52

次のようにします。

<DockPanel LastChildFill="True">
    <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
    <TextBox DockPanel.Dock="Left" HorizontalAlignment="Stretch"/> <!-- path to file -->
</DockPanel>
于 2010-11-05T04:15:52.310 に答える
31

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

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

    <TextBox />
    <Button Content="..." Grid.Column="1"/>
</Grid>
于 2010-09-09T16:31:21.493 に答える