Убрать кнопку расширения в Toolbar

258
10 июля 2018, 08:00

Можно ли убрать эту кнопку в ToolBar если они не требуется в данной ситуации?

Answer 1

WPF хорош тем, что все элементы в нем имеют свой стиль, который очень легко можно изменить!

  1. Создадим пустой элемент, просто напишем в XAML <ToolBar/>.
  2. В конструкторе (окно, где мы видим наше приложение) жмем на наш элемент правой кнопкой мышь.
  3. Жмем в выпадающем меню "Правка шаблона" - "Правка копии". У нас появится данное окно:

  1. Указываем в данном окне имя стиля, а также путь, где он будет создан.
  2. У вас будет создан весь дизайн данного контрола, который вы можете легко отредактировать! Давайте уберем кнопку:
    • Нам необходимо найти элемент с именем OverflowGrid, это обычный Grid (<Grid x:Name="OverflowGrid" HorizontalAlignment="Right">). Вы можете отредактировать его, можете скрыть, а можете удалить его и все, что с ним связано. Я лично скрою, допишу просто Visibility="Collapsed".
    • После скрытия этого Grid вы увидите, что справа будет отступ, его тоже стоит убрать. Находится он у элемента с именем MainPanelBorder. Находим его и видим, что он ссылается на стиль ToolBarMainPanelBorderStyle, находим его и там видим <Setter Property="Margin" Value="0,0,11,0"/>, ставим значение в 0 или вовсе удаляем строку.

Вот и все, теперь мы можем применить этот стиль к любому ToolBar и он будет без кнопки:

Вот таким простым способом вы можете изменять стиль любого контрола в WPF. Удачи в программирование!

Еще один способ (как по мне, не очень хороший, ибо работаем со стилями через код) [источник].

  1. Подписываем наш ToolBar на событие Loaded.
  2. В обработчике выполняем тоже, что мы делали через XAML:

    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();
        }
    }
    
READ ALSO
System.InvalidOperationException при получении пикселя

System.InvalidOperationException при получении пикселя

Код выполняется в отдельном потоке, вычисляет средний цвет изображения и рисует его на Control'еПри получении цвета пикселя _bmp

232
StackFrame, нет имени файла и номера строки

StackFrame, нет имени файла и номера строки

Использую debug - сборку приложения, и хотел бы получить имя строки вызова и имя файлаОднако, в случае имени файла, в текущем кадре хранится значение...

375
Как сделать высокочастотный фильтр? - C#

Как сделать высокочастотный фильтр? - C#

Если при создание низкочастотного я использовал класс ComplexImage Мне нужно сделать что бы изображение получалось как на фильтре, только на оборот...

257
Таймер обратного отсчёта C# [закрыт]

Таймер обратного отсчёта C# [закрыт]

Всем добрый вечер! Мне нужно сделать таймер обратного отсчёта 10 минутВ форме есть кнопка button1, после нажатия кнопки запустить таймер

265