添付プロパティを使用してこれを行うことができます。ButtonHelper
ここで説明されているように、別のクラス (たとえば、) でそれらを定義できます: http://msdn.microsoft.com/en-us/library/ms749011.aspx#custom。
次に、添付されたプロパティを参照するスタイルを作成します。
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<StackPanel Orientation="Horizontal" >
<Image Name="PART_Image"
Source="{Binding (local:ButtonHelper.NormalImageSource),
RelativeSource={RelativeSource Self}}" />
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source"
Value="{Binding (local:ButtonHelper.HoverImageSource),
RelativeSource={RelativeSource Self}}"
TargetName="PART_Image"/>
</Trigger>
<!-- and so on -->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
(コードはこの回答から盗まれました)。
クラスが配置されlocal
ている名前空間として宣言することを忘れないでください!ButtonHelper