在嵌套的WPF ToolBarPanel-ToolBar-Menu中,我们要摆脱左侧的握柄和右侧的溢出区域。它们都变灰了,但是我们希望它们根本不显示。
关于如何实现这一目标的任何想法?
以防万一我的说法不完全正确,如果您查看下面链接的图3中的图像,则在三个工具栏的最下方,下拉菜单的左侧和最右侧的右侧都有夹子按钮有溢出。
在嵌套的WPF ToolBarPanel-ToolBar-Menu中,我们要摆脱左侧的握柄和右侧的溢出区域。它们都变灰了,但是我们希望它们根本不显示。
关于如何实现这一目标的任何想法?
以防万一我的说法不完全正确,如果您查看下面链接的图3中的图像,则在三个工具栏的最下方,下拉菜单的左侧和最右侧的右侧都有夹子按钮有溢出。
Answers:
可以通过ToolBarTray.IsLocked="True"
在工具栏上设置附加属性来删除夹点。
删除溢出切换按钮,您必须按照sixlettervariables建议在自定义ControlTemplate中将其删除,如果您有Blend或可以下载Blend 3 Preview,这并不太困难。
您也可以仅将按钮隐藏在ToolBar的已加载事件中,无论采取哪种路线,都应ToolBar.OverflowMode="Never"
在ToolBar的菜单上设置Attached属性,以使项目不会意外溢出到无法访问的区域。
<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();
}
}
您可以使用Blend来简单地覆盖 ToolBarPanel,Menu或ToolBar 的ControlTemplate。
现在,您将编辑ToolBarPanel的控件模板,并可以将抓取和溢出信号的可见性设置为Collapsed。您可以冲洗并重复其他控件。这有点耗时,但是使用Blend并不难。
我认为与其只完全隐藏溢出按钮,不如仅在必要时显示它。这可以通过将其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>
用于垂直布局。将以上内容放在工具栏(或使用工具栏托盘,如果使用的话)之后
使用按钮所需的任何宽度和高度。
Kaxaml非常适合玩这些东西。