Как параметризовать / повторно использовать стиль управления XAML? - PullRequest
1 голос
/ 09 августа 2011

Я определил специальный стиль для кнопок, который используется для всех кнопок в приложении. Фон кнопки определяется как вертикальный LinearGradientBrush с двумя цветами. Если кнопка нажата, два цвета меняются с помощью триггеров.

Теперь мне нужны некоторые кнопки, которые используют разные цвета для градиента, при прочих равных условиях. Как я могу использовать уже определенный стиль для этого?

1 Ответ

4 голосов
/ 09 августа 2011

Вы можете ссылаться на свои кисти как DynamicResource в базе Style и добавлять новые кисти в производную Style

Базовый стиль использует DynamicResource для backgroundBrush и нажатыхBackgroundBrush

<Style TargetType="Button"
        x:Key="ButtonBaseStyle">
    <Style.Resources>
        <LinearGradientBrush x:Key="backgroundBrush" StartPoint="0.5, 0" EndPoint="0.5, 1">
            <GradientStop Color="Red" Offset="0"/>
            <GradientStop Color="Green" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="pressedBackgroundBrush" StartPoint="0.5, 0" EndPoint="0.5, 1">
            <GradientStop Color="Green" Offset="0"/>
            <GradientStop Color="Red" Offset="1"/>                    
        </LinearGradientBrush>
    </Style.Resources>
    <Setter Property="Background" Value="{DynamicResource backgroundBrush}"/>
    <!-- Additional Setters.. -->
    <Style.Triggers>
        <Trigger Property="IsPressed" Value="True">
            <Setter Property="Background"
                    Value="{DynamicResource pressedBackgroundBrush}"/>
        </Trigger>
    </Style.Triggers>
</Style>

Стиль на основе Определяет новые кисти, но использует те же Style

<Style TargetType="Button"
        BasedOn="{StaticResource ButtonBaseStyle}"
        x:Key="AnotherButtonStyle">
    <Style.Resources>
        <LinearGradientBrush x:Key="backgroundBrush" StartPoint="0.5, 0" EndPoint="0.5, 1">
            <GradientStop Color="Orange" Offset="0"/>
            <GradientStop Color="Blue" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="pressedBackgroundBrush" StartPoint="0.5, 0" EndPoint="0.5, 1">
            <GradientStop Color="Blue" Offset="0"/>
            <GradientStop Color="Orange" Offset="1"/>
        </LinearGradientBrush>
    </Style.Resources>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...