Silverlight 4 / XAML: как создавать стили \ шаблоны кнопок Simmilar без вставки копий - PullRequest
0 голосов
/ 24 июля 2011

Я сделал свой собственный шаблон кнопки, который должен быть в 6 разных цветах Теперь я сделал 1 стиль для одного из этих цветов. но стиль действительно большой. Что я хочу сделать, это использовать этот стиль также для других цветов (стили все одинаковые за исключением цветов)

теперь мне было интересно. Есть ли способ создать эти 6 отдельных стилей, не копируя и не вставляя их 6 раз, но связывая эти цвета?

вот код XAML для уточнения:

<UserControl.Resources>
        <LinearGradientBrush x:Key="WitNormalBorder" EndPoint="1,1" StartPoint="0,0">
            <GradientStop Color="#FFFAFAFF" Offset="0.33"/>
            <GradientStop Color="#FFD4D4D7" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="WitNormalFill" EndPoint="1,1" StartPoint="0,0">
            <GradientStop Color="#FFD8D8DC" Offset="0"/>
            <GradientStop Color="White" Offset="0.66"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="WitOverBorder" EndPoint="1,1" StartPoint="0,0">
            <GradientStop Color="White" Offset="0.33"/>
            <GradientStop Color="#FFDCDCDE" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="WitOverFill" EndPoint="1,1" StartPoint="0,0">
            <GradientStop Color="#FFE6E6E9" Offset="0"/>
            <GradientStop Color="White" Offset="0.66"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="WitDownBorder" EndPoint="1,1" StartPoint="0,0">
            <GradientStop Color="#FFF0F0FF" Offset="0.33"/>
            <GradientStop Color="#FFD2D2D3" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="WitDownFill" EndPoint="1,1" StartPoint="0,0">
            <GradientStop Color="#FFDADADC" Offset="0"/>
            <GradientStop Color="#FFFAFAFD" Offset="0.66"/>
        </LinearGradientBrush>
        <Style x:Key="KleurButtonWit" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border x:Name="Border" BorderThickness="0" Padding="5" CornerRadius="12" Background="{StaticResource WitNormalBorder}">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal"/>
                                    <VisualState x:Name="MouseOver">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="Border" Storyboard.TargetProperty="(UIElement.Background)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource WitOverBorder}">
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(UIElement.Background)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource WitOverFill}">
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(UIElement.Background)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource WitDownBorder}">
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(UIElement.Background)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource WitDownFill}">
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Disabled">
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused">
                                    </VisualState>
                                    <VisualState x:Name="Unfocused"/>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="Background" BorderThickness="0" CornerRadius="8" Background="{StaticResource WitNormalFill}">
                                <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Border>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>

как вы видите, если мне нужно скопировать это 6 раз, было бы много кода ...

Спасибо, Matthy

Ответы [ 2 ]

2 голосов
/ 24 июля 2011

Вы можете использовать свойство Style.BasedOn для реализации наследования со стилями.http://msdn.microsoft.com/en-us/library/system.windows.style.basedon.aspx Это должно исключить дублирование общих элементов.

0 голосов
/ 24 июля 2011

Если вы собираетесь использовать эти шесть стилей одновременно, вам нужно будет скопировать их шесть раз. Я не вижу возможности обойти это.

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

...