我正在尝试在 ToolBar 上创建一个项目(特别是标签、文本块或文本框),它将填充所有可用的水平空间。我已经通过从 ToolBarTray 中取出 ToolBar 本身来拉伸它,但我不知道如何使项目拉伸。
我尝试将 Width 设置为 Percenatage 或 Star 值,但它不接受。在各个地方将 Horizontal(Content)Alignment 设置为 Stretch 似乎也没有效果。
不幸的是,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。
您需要一个特殊的自定义面板,例如自动拉伸堆栈面板,并替换工具栏面板。看看这个,你可以在那里找到一个面板 http://blendables.com/products/productsLayoutmix.aspx
我遇到同样的问题已经有一段时间了,网上的帮助很少。
既然听起来您不需要工具栏的所有额外功能(可折叠/可移动托盘),为什么不直接使用顶部停靠网格,并稍微调整背景以使其看起来像标准工具栏?
您是否尝试过将项目包装在 Grid 中,而不是 StackPanel 中?
尝试在 ToolBar 中放置一个水平 StackPanel,然后在该 StackPanel 中放置您想要的元素。