Смена Foreground кнопки из анимации в ControlTemplate?
От: vasilov  
Дата: 13.05.11 03:31
Оценка:
Уважаемые господа.

Пытаюсь написать стиль для кнопки.
Проблема — не знаю как поменять цвет текста в нажатом состоянии из анимации.
<Style x:Key="SimpleToggleButton" TargetType="ToggleButton">
    <Setter Property="Foreground" Value="{DynamicResource ControlTextBrush}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ToggleButton">
                <Grid x:Name="Root">
                    <VisualStateManager.VisualStateGroups>
...
                        <VisualStateGroup x:Name="CheckStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.3" />
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Unchecked" />
                            <VisualState x:Name="Checked">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="BorderSelected"
                                                     Storyboard.TargetProperty="(FrameworkElement.Opacity)"
                                                     To="1" />
                                    <!--
                                        ?????
                                    -->
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
...
                    </VisualStateManager.VisualStateGroups>
...
                    <Border Name="BorderSelected"
                            Background="{DynamicResource SelectedBackgroundBrush}"
                            BorderBrush="{DynamicResource ControlBorderBrush}"
                            BorderThickness="{TemplateBinding Control.BorderThickness}"
                            CornerRadius="3,3,3,3"
                            Opacity="0" />
...
                    <ContentPresenter x:Name="presenter"
                                      Margin="{TemplateBinding Padding}"
                                      HorizontalAlignment="Center"
                                      VerticalAlignment="Center"
                                      RecognizesAccessKey="True"
                                      SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Получается, конечно, так
                <ControlTemplate.Triggers>
                    <Trigger Property="ToggleButton.IsChecked" Value="True">
                        <Setter Property="Foreground" Value="#ffffffff" />
                    </Trigger>
                </ControlTemplate.Triggers>

Но эффект не отражается в редакторе.
И хотелось бы из анимации. Пусть даже мгновенно (был черный текст — стал белый).
Я в стилях совсем зеленый, поэтому по возможности простыми словами или примерами.

Спасибо.
avalon 1.0rc3 rev 380, zlib 1.2.3
Re: Смена Foreground кнопки из анимации в ControlTemplate?
От: MxMsk Португалия  
Дата: 14.05.11 18:58
Оценка:
Здравствуйте, vasilov, Вы писали:

V>Пытаюсь написать стиль для кнопки.

V>Проблема — не знаю как поменять цвет текста в нажатом состоянии из анимации.
Можно использовать такой вариант:
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)">
    <DiscreteObjectKeyFrame Value="{x:Static Brushes.Black}"/>
</ObjectAnimationUsingKeyFrames>

Но потребуется писать "обратную" анимацию в Unchecked.

По мне проще сделать обычным триггером
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.