WPF工具栏:如何去除握把和溢出
问题的出现原因:想要在WPF的ToolBar中移除grip和overflow。
解决方法:可以使用Blend来简单地覆盖ToolBarPanel、Menu或ToolBar的ControlTemplate。
1. 右键单击ToolBar并选择Edit Template;
2. 在Edit Template中选择Edit a Copy;
3. 建议将副本添加到资源字典中;
4. 点击确定。
现在您将编辑ToolBarPanel的控制模板,并且可以将grip和overflow的可见性设置为Collapsed。对于其他控件,可以重复此过程。这可能需要一些时间,但使用Blend并不是非常困难。
由于Blend2和VS2008在一起使用时会出现很多问题,所以不能让Blend接近VS代码。在VS2k8SP1推出之前,我们曾经非常频繁地使用Blend。实际上,我希望VS2k8中的WPF编辑器就是Blend,这样右键单击某个对象就能选择将其分组为“StackPanel”或“Border”。可惜微软希望它们成为不同的体验。
我认为新的XAML Power Toys可能添加了一项允许对控件进行分组的功能。(也可能是MoXAML Power Toys...)
WPF ToolBar:如何删除grip和overflow
问题的原因:想要在WPF的ToolBar中删除grip和overflow按钮。
解决方法:可以通过在ToolBar上设置附加属性ToolBarTray.IsLocked="True"来删除grip。要删除overflow按钮,需要在自定义的ControlTemplate中删除它。还可以在ToolBar的Loaded事件中隐藏按钮。无论选择哪种方法,还应该在ToolBar的菜单上设置附加属性ToolBar.OverflowMode="Never",以防止项目意外溢出到无法访问的区域。
代码示例:
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(); } }
另外,ToolBar相比于简单的StackPanel加上按钮,提供了一些额外的功能,比如鼠标悬停效果和主题样式。可以使用简单的StackPanel并仍然获得ToolBar的样式。
此外,还发现可以直接在ToolBar的
还有一位用户提到,在他的ToolBar的子树中找不到OverflowGrid和MainPanelBorder这些名称,因此上述代码对他来说无法隐藏按钮。