1.界面模板代码部分
    <Window.Resources><Style x:Key="IconButton" TargetType="Button"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border x:Name="border"BorderBrush="{TemplateBinding BorderBrush}"  BorderThickness="{TemplateBinding BorderThickness}"  Background="{TemplateBinding Background}"  Padding="{TemplateBinding Padding}"SnapsToDevicePixels="True"CornerRadius="8,8,8,8"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Image Grid.Column="0" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(localModel:ButtonExtensions.IconPath)}" Width="16" Height="16" Margin="4,0"/><ContentPresenter Grid.Column="1" x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"   Content="{TemplateBinding Content}"   ContentStringFormat="{TemplateBinding ContentStringFormat}"   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"   VerticalAlignment="{TemplateBinding VerticalContentAlignment}"   SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"   RecognizesAccessKey="True"   Margin="{TemplateBinding Padding}"/></Grid></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="border" Property="Background" Value="#7DB8FF"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter TargetName="border" Property="Background" Value="#6CADFF "/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Opacity" TargetName="border" Value="0.6"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></Window.Resources>2.在工程中添加类,用于编辑附加属性,主要是为了设置图标地址。下面为附加属性代码
//通过附加属性来设置图标的路径public static class ButtonExtensions{public static readonly DependencyProperty IconPathProperty = DependencyProperty.RegisterAttached("IconPath", typeof(string), typeof(ButtonExtensions), new PropertyMetadata(null));public static string GetIconPath(DependencyObject obj){return (string)obj.GetValue(IconPathProperty);}public static void SetIconPath(DependencyObject obj, string value){obj.SetValue(IconPathProperty, value);}}3.界面按钮代码实现代码,如下
<Button Grid.Row="1" Grid.Column="0" x:Name="BtnLoadImage" 
Style="{StaticResource IconButton}" 
localModel:ButtonExtensions.IconPath="pack://application:,,,/Resources/OpenPath.png" 
Width="100" Height="40" 
Content="Load Image" 
Background="#6CADFF" BorderBrush="Transparent"/>