Я бы предложил пользовательский элемент управления. Вы все еще можете создать свой базовый стиль в xaml и использовать код для динамических вещей.
У вас было бы что-то вроде этого:
<Button>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Image Source="" Grid.Column="0" />
<TextBlock Grid.Column="1">Your button text</TextBlock>
<Image Source="" Grid.Column="2"/>
</Grid>
</Button>