Как сделать элемент на панели инструментов заполнить все доступное пространство в WPF - PullRequest
11 голосов
/ 24 октября 2008

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

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

Ответы [ 5 ]

13 голосов
/ 18 ноября 2008

К сожалению, похоже, что по умолчанию 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, если вы хотите, чтобы в строке было несколько элементов.

0 голосов
/ 29 декабря 2008

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

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

0 голосов
/ 08 декабря 2008

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

0 голосов
/ 24 октября 2008

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

0 голосов
/ 24 октября 2008

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

...