Панель инструментов WPF: как удалить сцепление и переполнение
во вложенном WPF ToolBarPanel-ToolBar-Menu мы хотим избавиться от ручки захвата слева и области переполнения справа. они оба серые, но мы бы хотели, чтобы они вообще не отображались.
есть идеи, как это сделать?
на всякий случай, если мои условия не совсем верны, если вы посмотрите на изображение на рисунке 3 ссылки ниже, на самой нижней из трех панелей инструментов есть ручка слева от раскрывающегося списка и справа от самая правая кнопка-это переполнение.
6 ответов:
сцепление на имущество
ToolBarTray.IsLocked="True"на панели инструментов.удалить Переполнение ToggleButton, вам придется удалить его в пользовательском ControlTemplate, как предлагает sixlettervariables, что, если у вас есть blend или вы можете загрузить предварительный просмотр Blend 3, не слишком сложно.
вы также можете просто скрыть кнопку в загруженном событии панели инструментов, хотя какой бы маршрут вы ни выбрали, вы также должны установить прикрепленное свойство
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, чтобы довольно просто переопределить ControlTemplate для панели инструментов, меню или панели инструментов.
- щелкните правой кнопкой мыши на панели инструментов и выберите Редактировать шаблон
- в окне изменить шаблон выберите Изменить копию
- я рекомендую добавить копию в словарь ресурсов
- Нажмите Кнопку ОК
теперь вы будете редактировать шаблон элемента управления для панели инструментов и можете установить видимость свернутой для панели инструментов. сигнал сжатия и переполнения. Вы можете промыть и повторить для других элементов управления. Это немного занимает много времени, но не очень трудно с 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"> . . .
вместо того, чтобы полностью скрывать кнопку переполнения, я думаю, что лучше показывать ее только при необходимости. Это можно сделать, связав его
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, если это используется)
используйте любую ширину и высоту, необходимую для ваших кнопок.
Kaxaml отлично подходит для игры с этим материалом.
Comments