Это происходит потому, что ToolBar применяет стиль, обозначенный ToolBar.ButtonStyleKey к кнопкам, вместо того, чтобы оставить для них стиль по умолчанию. (Вот почему кнопки на панелях инструментов плоские, хотя стиль по умолчанию поднят.) Справочник.
Вам нужно "захватить" этот стиль вместо стиля по умолчанию:
Если вы добавляете жестко запрограммированные кнопки на панель инструментов, вы можете установить для ToolBar.ItemContainerStyle собственный стиль, чтобы получить желаемый эффект.
Если вы используете ToolBar.ItemsSource, вы можете вместо этого использовать ToolBar.ItemTemplate для определения шаблона для данных панели инструментов.
Обратите внимание, что в некоторых случаях оба из них могут использоваться одновременно для дополнительной гибкости.
Это относится не только к панели инструментов, но и ко всем производным от ItemsControl.
Удачи,
Ответ 3 · StayOnTarget
Как отмечено в другом ответе, панель инструментов автоматически применяет свои собственные стили ко многим / наиболее типичным элементам управления, добавленным к ней.
В качестве альтернативы захвату его ключей стиля или применению ваших собственных стилей к элементам управления вручную вы можете вместо этого переопределить его метод, который в первую очередь устанавливает его внутренние стили. Простой пример:
public class LessIsMoreToolbar : ToolBar
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
// Nada
}
}
а затем используйте <local:LessIsMoreToolbar> в своем XAML вместо <Toolbar>.
Обратите внимание, что здесь PrepareContainerForItemOverride() специально НЕ вызывает base.PrepareContainerForItemOverride () `. Это то, что исключает установку стилей. Вы можете самостоятельно просмотреть базовую версию этого метода, чтобы убедиться, что это не устраняет ничего, что вам нужно.
Одно предостережение заключается в том, что PrepareContainerForItemOverrideопределяется ItemsControl, который похож на прадеда Toolbar. Его версия этого метода запускает некоторые другие Prepare... случаи, которые, вы также должны быть осторожны, ничего не сломают. Вы не можете (или, возможно, не должны) просто вызвать эту версию метод напрямую.
Но, в конце концов, если это сработает для вас, то это хороший простой подход.