WPF工具栏:如何删除抓地力和溢出

在一个嵌套的WPF ToolBarPanel-ToolBar-Menu中,我们想要摆脱左侧的把手和右侧的溢出区域。 他们都变灰了,但我们希望他们根本不显示。

任何想法如何实现?

以防万一我的条款不完全正确,如果您查看下面链接的图3中的图像,则在三个工具栏中最低的位置处,下拉框左侧的夹点和最右侧的右侧button有溢出。

工具栏的图像

可以通过在工具栏上设置附加属性ToolBarTray.IsLocked="True"来删除手柄。

要删除溢出ToggleButton ,您将不得不在六个字母variablesbuild议的自定义ControlTemplate中将其删除,如果您已经混合或可以下载Blend 3 Preview,则不是太困难。

你也可以在ToolBar的加载事件中隐藏这个button,不pipe你select哪条path,你还应该在ToolBar的菜单上设置附加属性ToolBar.OverflowMode="Never" ,这样项目不会意外地溢出到无法访问的区域。

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

并设置溢出ToggleButton折叠:

 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(); } } 

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

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

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

您可以通过设置ToolBar具有负右边距(并将负左边距放在左边,而右边不是正方形)来“移除”溢出,而无需提供新的控制模板。 然后,将ClipToBounds="True"添加到ToolBarPanel ,这将切断现在粘在面板区域之外的工具栏的边缘。

 <ToolBarPanel Grid.Row="0" ClipToBounds="True"> <ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0"> . . . 

而不是完全隐藏溢出button,我认为最好只在必要时才显示。 这可以通过将其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中完成)

我刚开始使用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> 

上面的方法可以隐藏溢出; 我已经使用以下来隐藏抓手:

  <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> 

垂直布局。 将上面的工具栏(或ToolbarTray,如果使用的话)

使用您的button需要的宽度和高度。

Kaxaml非常适合玩这个东西。