Для решения только на XAML вы можете рассмотреть это: -
Я предполагаю, что вы используете шаблон элемента управления как часть вашего стиля, например: -
<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Image x:Name="img" Style="{DynamicResource NormalImage}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Source" TargetName="img" Value="Images\DisabledImage.png"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я вырезал здесь шаблон управления, и ваш может быть более сложным
Теперь, если вы добавите следующий стиль в той же области, что и вышеприведенный стиль, тогда будет указано изображение, которое будет использоваться для случая по умолчанию
<Style x:Key="NormalImage" TargetType="{x:Type Image}">
<Setter Property="Source" Value="Images/DeafultImage.png"/>
</Style>
Далее в вашем XAML, когда вам нужно использовать кнопку, вы можете сделать это: -
<Button Style="{DynamicResource MyButtonStyle}" >
<Button.Resources>
<Style x:Key="NormalImage" TargetType="{x:Type Image}">
<Setter Property="Source" Value="Images/OverrideImage.png"/>
</Style>
</Button.Resources>
</Button>
Это не красиво, но все же допускает мастер-стиль и будет немного короче и меньше дублирования, чем использование нескольких стилей.
Способ, которым это работает, заключается в том, что имя ресурса «NormalImage» сначала ищется в ресурсах кнопки (которые обычно пусты), затем в родительском контейнере, вплоть до ресурсов страницы / окна и далее до приложения. Ресурсы. Первое совпадение выигрывает, поэтому в этом случае локально определенный стиль с именем «NormalImage», который ссылается на OverrideImage.png, выбирается перед ресурсом уровня окна / страницы / контейнера с тем же именем, которое ссылается на DefaultImage.png
Для дальнейшего уменьшения объема текста
Если все кнопки или большинство кнопок будут использовать этот стиль, тогда удалите x: Key = "MyButtonStyle" из определения стиля. Таким образом, WPF будет использовать стиль на всех кнопках в области видимости, без необходимости явно указывать стиль. Затем вы можете использовать style = "{x: null}", чтобы явно НЕ использовать стиль по умолчанию. Таким образом: -
<Window.Resources>
<Style x:Key="NormalImage" TargetType="{x:Type Image}">
<Setter Property="Source" Value="Images/DeafultImage.png"/>
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
...
</Setter>
</Style>
</Window.Resources>
<Button >
<Button.Resources>
<Style x:Key="NormalImage" TargetType="{x:Type Image}">
<Setter Property="Source" Value="Images/OverrideImage.png"/>
</Style>
</Button.Resources>
</Button>
<Button Style="{x:null}>Normal Button</Button>