Первый дочерний элемент WPF Dockpanel использует оставшееся пространство

В моем окне есть список DockPanel , где можно указать пару файлов. Каждая панель DockPanel имеет текстовое поле (для пути) и кнопку (для поиска файла).

I ' Мы воссоздали простую страницу 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" , но из-за этого кнопка снова стала маленькой, а текстовое поле не стало широким (даже с HorizontalAlignment = "Stretch" ).

Причина, по которой мне нужны элементы управления в таком порядке, заключается в том, что я хочу, чтобы пользователь достиг TextBox перед кнопкой при использовании вкладки для навигации в окне. Я посмотрел на настройку TabIndex , но это кажется хакерским, любимые особенности WPF - это то, что tabindex находится в том порядке, в котором элементы управления определены в XAML. Не говоря уже о том, что мне, вероятно, придется вручную установить TabIndex для всего в Window.

Мне кажется, что установка TextBox.HorizontalAlignment не соблюдается. Как я могу заставить первый элемент управления использовать столько места, сколько он может, но при этом сохранить порядок табуляции?

31
задан Nate 9 September 2010 в 15:16
поделиться