101

在嵌套的 WPF ToolBarPanel-ToolBar-Menu 中,我们希望摆脱左侧的手柄和右侧的溢出区域。它们都是灰色的,但我们希望它们根本不显示。

关于如何做到这一点的任何想法?

以防我的术语不完全正确,如果您查看下面链接的图 3 中的图像,在三个工具栏的最底部,下拉菜单的左侧和最右侧的右侧有把手按钮有溢出。

工具栏的图像

4

6 回答 6

164

ToolBarTray.IsLocked="True"可以通过在 ToolBar 上设置附加属性来移除夹点。

要删除Overflow ToggleButton,您必须按照 Sixlettervariables 的建议在自定义 ControlTemplate 中将其删除,如果您有 blend 或可以下载 Blend 3 Preview 并不太难。

您也可以在 ToolBar 的加载事件中隐藏按钮,但无论您采用哪种方式,您还应该ToolBar.OverflowMode="Never"在 ToolBar 的菜单上设置附加属性,以便项目不会意外溢出到无法访问的区域。

<ToolBarPanel DockPanel.Dock="Top">
    <ToolBar ToolBarTray.IsLocked="True" Loaded="ToolBar_Loaded">
        <Menu ToolBar.OverflowMode="Never">
            <MenuItem Header="File" />
            <MenuItem Header="New" />
        </Menu>
    </ToolBar>
</ToolBarPanel>

并将溢出切换按钮设置为折叠:

private void ToolBar_Loaded(object sender, RoutedEventArgs e)
{
    ToolBar toolBar = sender as ToolBar;
    var overflowGrid = toolBar.Template.FindName("OverflowGrid", toolBar) as FrameworkElement;
    if (overflowGrid != null)
    {
        overflowGrid.Visibility = Visibility.Collapsed;
    }
    var mainPanelBorder = toolBar.Template.FindName("MainPanelBorder", toolBar) as FrameworkElement;
    if (mainPanelBorder != null)
    {
        mainPanelBorder.Margin = new Thickness();
    }
}
于 2009-06-26T20:57:50.397 回答
8

您可以通过将 设置为具有负的右边距来“删除”溢出而不提供新的控件模板ToolBar(并输入一个负的左边距,这样它看起来不奇怪与圆形的左边缘但方形的右边缘)。然后,添加ClipToBounds="True"ToolBarPanelwhich 将切断工具栏的边缘,这些边缘现在粘在面板区域之外。

<ToolBarPanel Grid.Row="0" ClipToBounds="True">
    <ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
    . . .
于 2014-11-26T15:48:29.820 回答
8

您可以使用 Blend 来简单地覆盖ToolBarPanel、Menu 或 ToolBar 的 ControlTemplate。

  1. 右键单击工具栏并选择编辑模板
  2. 从编辑模板中,选择编辑副本
  3. 我建议将副本添加到资源字典
  4. 点击确定

您现在将编辑 ToolBarPanel 的控件模板,并且可以将夹点和溢出信号的可见性设置为 Collapsed。您可以冲洗并重复其他控件。这有点耗时,但使用 Blend 并不难。

于 2009-06-26T20:09:02.710 回答
6

我认为与其完全隐藏溢出按钮,不如仅在必要时显示它。这可以通过将其属性绑定Visibility到其IsEnabled属性来完成:

private static void FixupToolBarOverflowArrow(ToolBar toolBar)
{
    Action fixup = () =>
    {
        var overflowButton = toolBar.Template.FindName("OverflowButton", toolBar) as ButtonBase;
        if (overflowButton != null)
        {
            overflowButton.SetBinding(
                VisibilityProperty,
                new Binding("IsEnabled")
                {
                    RelativeSource = RelativeSource.Self,
                    Converter = new BooleanToVisibilityConverter()
                });
        }
    };

    if (toolBar.IsLoaded)
    {
        fixup();
    }
    else
    {
        RoutedEventHandler handler = null;
        handler = (sender, e) =>
        {
            fixup();
            toolBar.Loaded -= handler;
        };

        toolBar.Loaded += handler;
    }
}

(同样的事情可以通过重新定义模板在 XAML 中完成)

于 2015-09-03T15:24:50.463 回答
3

我刚开始使用 WPF,无法获得上述任何方法来隐藏我的溢出箭头(Visual Studio 2010)。似乎影响箭头的唯一事情是上面的 Toolbar_Load 示例,但所做的只是将箭头变成一个看起来像箭头一样糟糕的空地。我能想到的最简单的方法就是设置工具栏的边距。

<ToolBar Height="26" 
         Name="toolBar" 
         DockPanel.Dock="Top" 
         ToolBarTray.IsLocked="True" 
         ToolBar.OverflowMode="Never"        <!-- no effect -->
         Margin="0,0,-13,0">                 <!-- worked -->
         <Menu ToolBar.OverflowMode="Never"> <!-- no affect -->
             <MenuItem Header="_File"></MenuItem>
         </Menu>
</ToolBar>
于 2013-08-18T17:54:57.977 回答
0

上述方法可以隐藏溢出;我使用以下内容来隐藏抓手:

         <Label Height="44" Width="30" Background="{StaticResource CtrlBackground}" Margin="-20,0,0,0"></Label>

对于水平布局,以及

         <Label Height="44" Width="230" Background="{StaticResource CtrlBackground}" Margin="0,-20,0,0" HorizontalAlignment="Left"></Label>

对于垂直布局。将上面的内容放在工具栏(或工具栏托盘,如果使用的话)之后

使用按钮所需的任何宽度和高度。

Kaxaml 非常适合玩这些东西。

于 2013-04-14T17:40:04.567 回答