В окошке у меня есть список DockPanel
для указания пары файлов. Каждая DockPanel имеет текстовое поле (для пути) и кнопку (для поиска файла).
Я воссоздал простую страницу 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>
Проблема в том, что я хочу, чтобы кнопка была справа от текстового поля, но это приводит к тому, что текстовое поле становится очень маленьким, поскольку LastChild DockPanel — это кнопка, которая использует оставшееся пространство. Я пытался изменить это, перетасовав их и установив LastChildFill="False"
, но это только приводит к тому, что кнопка снова становится маленькой, а не делает TextBox широким (даже с HorizontalAlignment="Stretch"
).
Причина, по которой мне нужны элементы управления в таком порядке, заключается в том, что я хочу, чтобы пользователь достиг TextBox перед кнопкой при использовании tab
для навигации в окне. Я просмотрел настройку TabIndex
, но она кажется хакерской, любимая функция WPF заключается в том, что tabindex находится в том порядке, в котором элементы управления определены в XAML. Не говоря уже о том, что мне, вероятно, придется вручную устанавливать TabIndex для всего в окне.
Мне кажется, что настройка TextBox.HorizontalAlignment не соблюдается. Как сделать так, чтобы первый элемент управления занимал как можно больше места, но при этом сохранял порядок табуляции?