ウィンドウには、いくつかのファイルを指定するためのDockPanel
sのリストがあります。各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.HorizontalAlignmentの設定が尊重されていないようです。 最初のコントロールでできるだけ多くのスペースを使用し、タブの順序を維持するにはどうすればよいですか?
DockPanelの動作が必要ない場合は、DockPanelを使用しないでください。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox />
<Button Content="..." Grid.Column="1"/>
</Grid>
このようにします:
<DockPanel LastChildFill="True">
<Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
<TextBox DockPanel.Dock="Left" HorizontalAlignment="Stretch"/> <!-- path to file -->
</DockPanel>