Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Наследование стилей


Автор: neProger 4.3.2012, 04:20
Недавно начал осваивать WPF. Появилась такая задача: 

необходимо создать кнопки двух видов - обычные кнопки и кнопки, которые увеличиваются при наведении на них курсором мышки. Цвета, градиенты и т.д. необходимо задавать в одном месте (базовый стиль(?)). Разница лишь в том, что одни кнопки увеличиваются при наведении курсора, а другие – нет

Базовый стиль выглядит так:

Код

        <Style x:Key="BaseStyle" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate x:Name="BaseTemplate"  TargetType="{x:Type Button}">
                        <Grid >
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="MouseOver">
                                        <Storyboard.../>
                                    </VisualState>
                                    <VisualState x:Name="Pressed">
                                        <Storyboard.../>
                                    </VisualState>
                                    <VisualState x:Name="Disabled"/>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="border" BorderThickness="2" BorderBrush="#FFC07C00" Background="#FFFD9700">
                                <ContentPresenter x:Name="contentPresenter" Margin="2"/>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


Во втором стиле, видимо, должен быть какой-то "Storyboard", который трансформирует "Grid" исходного стиля (?)

А на кнопки вешать необходимые стили:

Код

<Button Style="{DynamicResource BaseStyle}" Content="Обычная кнопка"/>
<Button Style="{DynamicResource CursorScaleStyle}" Content="Увеличивающаяся кнопка"/>


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

Автор: erm0l0v 19.3.2012, 14:27
Я бы сделал так:
Код

<Style.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetProperty="Opacity" To="1"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            <EventTrigger RoutedEvent="MouseLeave">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="Opacity" To="0.6"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>


Здесь я в качестве примера изменяю прозрачность элемента. И не нужно переопределять ControlTemplate.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)