Стиль кнопки Silverlight застревает на весь экран - PullRequest
0 голосов
/ 15 декабря 2009

Итак, у меня есть несколько кнопок в Silverlight, которые я сделал из изображений. В каждом случае кнопка имеет обычное изображение и изображение при наведении. Я использовал Blend, чтобы изображение при наведении исчезало более чем за .15 секунд при наведении.

Проблема в том, что я больше не могу понять, как получить доступ к изображениям, поскольку они встроены в стиль. Итак, у меня есть отдельный стиль для каждой кнопки вместо один UserControl с двумя сменными изображениями.

Также у меня есть набор из двух кнопок: FullScreen и ExitFullScreen. Изображение при наведении курсора застревает в этом случае:

  1. Нажмите полный экран. Полноэкранная кнопка выхода теперь находится в другом месте.
  2. Нажмите выход из полноэкранного режима. Полноэкранная кнопка вернулась в исходное место. Отображается анимация при наведении, даже если мышь не находится над кнопкой.

Код: -

<Style x:Key="ExitFullScreenButton" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused"/>
                                    <VisualState x:Name="Unfocused"/>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualStateGroup.Transitions>
                                        <VisualTransition GeneratedDuration="00:00:00.1500000" To="MouseOver"/>
                                    </VisualStateGroup.Transitions>
                                    <VisualState x:Name="Normal"/>
                                    <VisualState x:Name="MouseOver">
                                        <Storyboard>
                                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="image" Storyboard.TargetProperty="(UIElement.Opacity)">
                                                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
                                            </DoubleAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Pressed"/>
                                    <VisualState x:Name="Disabled"/>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Image Source="Images/ControlBar/exitFullScreenButton.png"/>
                            <Image x:Name="image" Opacity="0" Source="Images/ControlBar/exitFullScreenButtonHover.png"/>
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="" ToolTipService.ToolTip="Full Screen"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


<Button x:Name="ExitFullScreenButton" Click="ExitFullScreenButton_Click" Canvas.Top="14"
                  Style="{StaticResource ExitFullScreenButton}" 
                  Width="32" Content="Button" Visibility="Collapsed"/>

1 Ответ

0 голосов
/ 16 декабря 2009

В итоге я просто создал пользовательский элемент управления и сделал анимацию в коде.

private Storyboard hoverAnimation = new Storyboard();

private void CreateAnimation()
        {
            SizeChanged += OnSizeChanged;

            Duration duration = new Duration(TimeSpan.FromMilliseconds(150));
            hoverAnimation.Duration = duration;

            DoubleAnimation animation = new DoubleAnimation();
            animation.Duration = duration;
            hoverAnimation.Children.Add(animation);

            Storyboard.SetTarget(animation, HoverIcon);
            Storyboard.SetTargetProperty(animation, new PropertyPath(Image.OpacityProperty));

            animation.To = 1;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...