Для этого вы должны переопределить общий шаблон кнопки.в вашем App.Xaml (или любом более подходящем месте) определите следующее:
<Application.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ButtonBase" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
<Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="24"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Source="../Resources/Images/foo.png"></Image>
<ContentPresenter Grid.Column="1" RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" Margin="{TemplateBinding Control.Padding}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
Этот стиль не имеет ключа и поэтому применяется ко всем экземплярам Button.Обратите внимание, что вы должны установить явный тип, вы не можете сделать это, например, для ButtonBase.
Имейте в виду, что это удаляет хром кнопки (заменяет ее простой рамкой), если вы хотите сохранитьОригинальный Chrome сначала берет оригинальный шаблон кнопки и соответствующим образом модифицирует его (оберните Grid или DockPanel вокруг ContentPresenter и добавьте изображение).
Вы можете получить исходный шаблон с помощью таких инструментов, как "Просмотрщик шаблонов управления WPF"."или смесь выражения.