Как сделать элемент на панели инструментов заполнить все свободное пространство в WPF

Я пытаюсь сделать элемент на ToolBar (в частности, Label, TextBlock или TextBox), который заполнит все доступные горизонтальные пространства. Я сам ToolBar растянулся, вытащив его из ToolBarTray, но я не могу понять, как сделать элементы растягиваться.

Я попробовал установить значение Width в значение Percenatage или Star, но он не принимает этого. Настройка горизонтального (контенту) выравнивания на растяжку в разных местах также не имеет никакого эффекта.

Ответ 1

К сожалению, похоже, что в ControlTemplate по умолчанию для ToolBar не используется элемент ItemsPresenter, он использует ToolBarPanel, поэтому настройка ToolBar.ItemsPanel не будет иметь никакого эффекта.

ToolBarPanel наследуется от StackPanel. По умолчанию его ориентация привязана к родительскому ToolBar.Orientation, но вы можете переопределить это и установить ориентацию по вертикали со стилем, и это позволит элементам растягиваться горизонтально:

<DockPanel>
    <ToolBar DockPanel.Dock="Top">
        <ToolBar.Resources>
            <Style TargetType="{x:Type ToolBarPanel}">
                <Setter Property="Orientation" Value="Vertical"/>
            </Style>
        </ToolBar.Resources>
        <ComboBox HorizontalAlignment="Stretch" SelectedIndex="0">
            <ComboBoxItem>A B C</ComboBoxItem>
            <ComboBoxItem>1 2 3</ComboBoxItem>
            <ComboBoxItem>Do Re Mi</ComboBoxItem>
        </ComboBox>
    </ToolBar>
    <Border Margin="10" BorderBrush="Yellow" BorderThickness="3"/>
</DockPanel>

Затем вы можете использовать Grid или что-то вместо ComboBox, если вам нужно несколько элементов в строке.

Ответ 2

Попробуйте поставить горизонтальную StackPanel в ToolBar, а затем элемент, который вы хотите внутри этой StackPanel.

Ответ 3

Вам нужна специальная настраиваемая панель, например автоматическая растягиваемая панель стека, и замените панель инструментов. Проверьте это, вы можете найти одну панель там http://blendables.com/products/productsLayoutmix.aspx

Ответ 4

Вы пробовали обернуть свой предмет в гриде, а не в StackPanel?

Ответ 5

У меня была такая же проблема некоторое время, и в Интернете очень мало информации.

Так как это не похоже на то, что вам нужны все дополнительные функции панели инструментов (складные/подвижные лотки), почему бы просто не использовать верхнюю стыковую сетку и немного настроить фон, чтобы он выглядел как стандартная панель инструментов