Как можно решить проблему с повторяющейся стилизацией?

В общем, есть у меня кнопки, которые состоят из картинки и тултипа внутри:

введите сюда описание изображения

Проблема в том, что каждой такой кнопке нужно прописать Style...

Вроде, в TagetType стиля нельзя указать различные условия для применения.

Какие могут быть решения данной проблемы?

Есть мысля-сделать наследование, но если делать по умному, то нужно запрещать в такую кнопку что-либо сувать, а это по моему геморно...


Ответы (1 шт):

Автор решения: Андрей NOP
<Window.Resources>
    <!-- Ваша библиотека стилей -->
    <Style x:Key="BaseButton" TargetType="Button">
        <Setter Property="Width" Value="50"/>
        <Setter Property="Height" Value="50"/>
        <Setter Property="Margin" Value="5"/>
    </Style>
    <Style x:Key="RedButton" TargetType="Button" BasedOn="{StaticResource BaseButton}">
        <Setter Property="Background" Value="Red"/>
    </Style>
    <Style x:Key="GreenButton" TargetType="Button" BasedOn="{StaticResource BaseButton}">
        <Setter Property="Background" Value="Green"/>
    </Style>
</Window.Resources>

<Grid Margin="5">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <StackPanel Orientation="Horizontal">
        <StackPanel.Resources>
            <!-- Для всех кнопок в этом контейнере по умолчанию
                будет использоваться стиль RedButton -->
            <Style TargetType="Button" BasedOn="{StaticResource RedButton}"/>
        </StackPanel.Resources>
        <Button/>
        <Button/>
        <Button/>
        <Button/>
    </StackPanel>

    <StackPanel Grid.Row="1" Orientation="Horizontal">
        <StackPanel.Resources>
            <!-- Для всех кнопок в этом контейнере по умолчанию
                будет использоваться стиль GreenButton -->
            <Style TargetType="Button" BasedOn="{StaticResource GreenButton}"/>
        </StackPanel.Resources>
        <Button/>
        <Button/>
        <Button/>
        <Button/>
    </StackPanel>
</Grid>

Результат

→ Ссылка