有什么办法可以实现这个目标吗?
万一我的术语并不完全正确,如果您查看下面链接中图3中的图像,在三个工具栏中最低的工具栏上方,有一个下拉菜单左侧的手柄,以及在最右侧按钮的右侧有溢出菜单。 工具栏的图像
将工具栏锁定可以通过在工具栏上设置附加属性ToolBarTray.IsLocked="True"
来实现。
要删除溢出切换按钮,您需要像sixlettervariables建议的那样在自定义ControlTemplate中删除它。如果您有Blend或者可以下载Blend 3 Preview,这并不太困难。
您也可以在ToolBar的loaded事件中隐藏该按钮。不过,无论采用哪种方法,您还应该在工具栏菜单上设置附加属性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>
并将Overflow 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();
}
}
你可以通过将ToolBar
设置为负右边距(并添加负左边距,以便在具有圆角左边缘但方形右边缘时不会显得奇怪),而无需提供新的控件模板来“删除”溢出内容。 然后,在ToolBarPanel
中添加ClipToBounds="True"
,这将剪切现在超出面板区域的工具栏的边缘。
<ToolBarPanel Grid.Row="0" ClipToBounds="True">
<ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
. . .
您可以使用Blend相对简单地覆盖ToolBarPanel、Menu或ToolBar的ControlTemplate。
现在您将编辑ToolBarPanel的控件模板,并可以将握把和溢出信号的可见性设置为Collapsed。您可以为其他控件重复此操作。这可能有点耗时,但使用Blend并不是非常困难。
我认为,与其完全隐藏溢出按钮,只有在必要时显示它更好。可以通过将其可见性
属性绑定到其启用状态
属性来实现:
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;
}
}
我刚开始学习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>
对于垂直布局,请在工具栏(或者如果使用的话,是工具栏托盘)之后放置上述内容。
使用任何所需的按钮宽度和高度。
Kaxaml非常适合用来尝试这些东西。