11

我正在尝试在 ToolBar 上创建一个项目(特别是标签、文本块或文本框),它将填充所有可用的水平空间。我已经通过从 ToolBarTray 中取出 ToolBar 本身来拉伸它,但我不知道如何使项目拉伸。

我尝试将 Width 设置为 Percenatage 或 Star 值,但它不接受。在各个地方将 Horizo​​ntal(Content)Alignment 设置为 Stretch 似乎也没有效果。

4

5 回答 5

13

不幸的是,ToolBar 的默认 ControlTemplate 似乎不使用 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。

于 2008-11-18T19:08:41.673 回答
0

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

于 2008-10-24T04:47:26.650 回答
0

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

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

于 2008-12-29T20:35:53.597 回答
0

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

于 2008-12-08T08:32:54.443 回答
0

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

于 2008-10-24T03:33:18.500 回答