如何在工具栏中创建项目填充WPF中的所有可用空间

时间:2008-10-24 03:26:02

标签: wpf layout toolbar

我正在尝试在ToolBar上创建一个项目(特别是Label,TextBlock或TextBox),它将填充所有可用的水平空间。我已经将ToolBar本身从它的ToolBarTray中拉出来了,但我无法弄清楚如何使项目伸展。

我尝试将Width设置为Percenatage或Star值,但它不接受。将水平(内容)对齐设置为在各个位置拉伸似乎也没有效果。

5 个答案:

答案 0 :(得分:13)

不幸的是,看起来ToolBar的默认ControlTemplate不使用ItemsPresenter,它使用ToolBarPanel,因此设置ToolBar.ItemsPanel不会有任何影响。

ToolBarPanel继承自StackPanel。默认情况下,其Orientation绑定到父ToolBar.Orientation,但您可以覆盖它并使用样式将其Orientation设置为Vertical,这将允许项目水平拉伸:

<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>

如果你想在一行上有多个项目,你可以使用网格或代替上面的ComboBox。

答案 1 :(得分:0)

尝试在ToolBar中放置一个水平StackPanel,然后在StackPanel中放置你想要的元素。

答案 2 :(得分:0)

您需要一个特殊的自定义面板,例如自动拉伸堆栈面板,并替换toolbarpanel。看看这个,你可以找到一个面板 http://blendables.com/products/productsLayoutmix.aspx

答案 3 :(得分:0)

您是否尝试过在Grid中包装项目,而不是在StackPanel中?

答案 4 :(得分:0)

我有一段时间遇到同样的问题,网上提供的帮助很少。

由于听起来您不需要工具栏(可折叠/可移动托盘)的所有额外功能,为什么不使用顶部停靠网格,稍微调整背景以使其看起来像标准工具栏?