WPF ToolBar: как удалить захват и переполнение
В вложенном WPF ToolBarPanel-ToolBar-Menu мы хотим избавиться от руля захвата слева и области переполнения справа. они оба выделены серым цветом, но мы бы хотели, чтобы они вообще не отображались.
любые идеи о том, как это сделать?
на всякий случай, если мои условия не совсем правильны, если вы посмотрите на изображение на рисунке 3 ссылки ниже, на самой нижней из трех панелей инструментов находится рукоятка слева от выпадающего списка и справа от самая правая кнопка там переполнения.
Изображение панелей инструментов
Ответы
Ответ 1
Захват можно удалить, установив прикрепленное свойство ToolBarTray.IsLocked="True"
в ToolBar.
Чтобы удалить Overflow ToggleButton, вам нужно будет удалить его в пользовательском элементе ControlTemplate, как предполагает предложение sixlettervariables, которое, если у вас есть смесь или вы можете скачать Предварительный просмотр Blend 3 не слишком сложный.
Вы также можете просто скрыть кнопку в загруженном событии 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>
И установите OverflowButton переполнения:
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();
}
}
Ответ 2
Вы можете использовать Blend, чтобы просто переопределить ControlTemplate для ToolBarPanel, Menu или ToolBar.
- Щелкните правой кнопкой мыши на панели инструментов и выберите "Редактировать шаблон"
- В разделе "Редактировать шаблон" выберите "Редактировать копию"
- Я рекомендую добавить копию в словарь ресурсов
- Нажмите Ok
Теперь вы редактируете шаблон управления для ToolBarPanel и можете установить видимость на Collapsed для сигнала захвата и переполнения. Вы можете промыть и повторить для других элементов управления. Это немного трудоемко, но не очень сложно с Blend.
Ответ 3
Вы можете "удалить" переполнение без подачи нового шаблона управления, установив ToolBar
на отрицательные правые поля (и выбросьте отрицательное левое поле, чтобы оно не выглядело нечетным с закругленными левыми краями, но с квадратными правыми краями). Затем добавьте ClipToBounds="True"
в ToolBarPanel
, который отрежет края панели инструментов, которые теперь торчат вне области панели.
<ToolBarPanel Grid.Row="0" ClipToBounds="True">
<ToolBar ToolBarTray.IsLocked="True" Margin="-5,0,-13,0" Padding="5,0,0,0">
. . .
Ответ 4
Вместо того, чтобы полностью скрывать кнопку переполнения, я думаю, что лучше показать ее только тогда, когда это необходимо. Это можно сделать, привязывая его свойство 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, переопределив шаблон)
Ответ 5
Я только начинаю работать с 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>
Ответ 6
Методы выше работают, чтобы скрыть переполнение; Я использовал следующее, чтобы скрыть захват:
<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, если используете это)
Используйте для этого кнопки любую ширину и высоту.
Kaxaml отлично подходит для игры с этим материалом.