Экранный эффект вспышки в WPF или Silverlight

Я думаю, вы можете сделать это.

onBlur = () => {
  this.setState(prevState => ({ lastNumber: prevState.selectedNumber }));
}

onChange = (e) => {
  this.setState({ selectedNumber: e.target.value });
}

Теперь, каждый раз, когда фокус размыт от ввода, ваш lastNumber обновляется. И при нажатии кнопки отмены все должно работать нормально. Надеюсь это работает. Удачного кодирования :)

5
задан Johan Danforth 10 October 2008 в 11:46
поделиться

4 ответа

Я предложил решение, которое выглядит довольно хорошим. Некоторый демонстрационный XAML, что я записал на свой счет в Смешении 2,0 SP1, похож на это:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="ScreenGlintApplication.Window1"
    x:Name="Window"
    Title="Window1"
    Width="500" Height="250" Background="#FF000000" Foreground="#FF3EE229" >

    <Grid x:Name="LayoutRoot">
        <TextBlock TextWrapping="Wrap" FontSize="40" >
        <Run Text="This is some sample text to have something to work with. Have a nice day! /Johan"/>
        </TextBlock>
        <Canvas Panel.ZIndex="99" >
        <Rectangle x:Name="ScreenGlintRect"  
            Width="{Binding Path=ActualWidth, ElementName=Window, Mode=Default}" 
            Height="{Binding Path=ActualHeight, ElementName=Window, Mode=Default}" 
            Opacity="0.4" >
            <Rectangle.Triggers> 
                <EventTrigger RoutedEvent="Rectangle.Loaded"> 
                  <BeginStoryboard> 
                    <Storyboard> 
                    <DoubleAnimation Storyboard.TargetName="ScreenGlintRect" 
                    Storyboard.TargetProperty="(Canvas.Left)"
                    From="-500" To="1000" Duration="0:0:2" />
                    </Storyboard> 
                  </BeginStoryboard> 
                </EventTrigger> 
          </Rectangle.Triggers> 

            <Rectangle.Fill>
                <LinearGradientBrush StartPoint="0,1" EndPoint="1,1">
                    <GradientStop Color="Transparent" Offset="0.0" />
                    <GradientStop x:Name="GlintColor" Color="LightGreen" Offset="0.50" />
                    <GradientStop Color="Transparent" Offset="1" />
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        </Canvas>
    </Grid>
</Window>

Опция состоит в том, чтобы сделать это в коде позади, который крут, если Вы хотите иметь детализированный контроль над анимацией. Например:

    ScreenGlintRect.Width = Width;
    ScreenGlintRect.Height = Height;
    var animation = new DoubleAnimation
    {
        Duration = new Duration(TimeSpan.FromSeconds(2)),
        From = (-Width),
        To = Width * 2
    };
    ScreenGlintRect.BeginAnimation(Canvas.LeftProperty, animation);

Это - код, который я использую, и это выглядит достаточно хорошим для меня. Если бы Вы получили ускорение HW, то Вы могли бы попытаться добавить некоторую размытость к нему. Вам, вероятно, придется настроить код и скрыться/показать прямоугольник, но в основном это - он.

5
ответ дан 14 December 2019 в 09:05
поделиться

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

  1. Измените видимость панели к Скрытому.
  2. Измените непрозрачность на 0.
  3. Измените Альфу цвета к 0.

Если Вы только изменяете Альфу, это все еще активируемо по щелчку, даже когда Вы не видите цвета.

Вне темы, но: попытайтесь сделать эффект тонким и возможно иметь опцию включения - выключения.

0
ответ дан 14 December 2019 в 09:05
поделиться

Легко поместить любую прозрачную панель "в вершину" основной Сетки и анимировать элемент, помещенный в панель. Для размещения панели "в вершину" просто поместите его в конце иерархии XAML после любого другого элемента. С другой стороны, можно использовать свойство "ZIndex".

Laurent

2
ответ дан 14 December 2019 в 09:05
поделиться

Присоединенный к этой статье о progressbars пример кода, который имеет индикатор выполнения стиля Vista, который имеет вспышку стиля Vista. Это использует Границу и Кисть и Преобразователь для создания анимаций. Я не могу сказать, что полностью понимаю все там, но это работает отлично. Должно быть легко скопировать в Ваши потребности.

0
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: