我正在尝试在ToolBar上创建一个项目(特别是Label,TextBlock或TextBox),它将填充所有可用的水平空间。我已经将ToolBar本身从它的ToolBarTray中取出来伸展,但是我无法弄清楚如何让物品伸展。
我尝试将Width设置为Percenatage或Star值,但它不接受。在各个地方设置水平(内容)对齐拉伸似乎也没有效果。
我正在尝试在ToolBar上创建一个项目(特别是Label,TextBlock或TextBox),它将填充所有可用的水平空间。我已经将ToolBar本身从它的ToolBarTray中取出来伸展,但是我无法弄清楚如何让物品伸展。
我尝试将Width设置为Percenatage或Star值,但它不接受。在各个地方设置水平(内容)对齐拉伸似乎也没有效果。
不幸的是,看起来默认的ControlTemplate for ToolBar不使用ItemsPresenter,它使用ToolBarPanel,因此设置ToolBar.ItemsPanel不会有任何影响。
ToolBarPanel继承自StackPanel。默认情况下,其Orientation绑定到父ToolBar.Orientation,但您可以覆盖它并使用Style将其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>
然后,如果您想要一行上有多个项目,则可以使用Grid或其他代替上面的ComboBox。
尝试在ToolBar中放置一个水平StackPanel,然后在StackPanel中放置你想要的元素。
您是否尝试将项目包装在网格中,而不是在StackPanel中?
你需要一个特殊的自定义面板 自动拉伸堆栈面板,并替换toolbarpanel。看看这个,你可以找到一个面板 http://blendables.com/products/productsLayoutmix.aspx
我有一段时间遇到同样的问题,网上提供的帮助很少。
因为它听起来不像你需要工具栏的所有额外功能(可折叠/可移动托盘),为什么不只是使用顶部停靠网格,并稍微调整背景使其看起来像标准工具栏?