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

11
我正在尝试制作一个在ToolBar上的项目(特别是Label、TextBlock或者TextBox),以便填满所有可用的水平空间。我已经通过将其从其ToolBarTray中取出来使ToolBar本身拉伸,但我无法弄清楚如何拉伸项目。
我尝试设置宽度为百分比或星号值,但不被接受。在各种地方设置Horizontal(Content)Alignment为Stretch似乎也没有效果。

请问您能否发布您的XAML以演示哪些部分出现了问题? - Craig Shearer
5个回答

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的东西。


0
你尝试过将你的项目包裹在 Grid 而不是 StackPanel 中吗?

0

我也遇到了同样的问题,但在线上几乎找不到什么有用的帮助。

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


0
尝试在工具栏中放置一个水平的StackPanel,然后将您想要的元素放在该StackPanel内。

通过Reflector查看ToolbarPanel.MeasureOverride,我认为这可能需要一个自定义类,该类查看其包含的工具栏,在其中可以放置工具栏控件,因为工具栏本身告诉其中的项目有无限的可用空间。 - Cheetah

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接