Эффект бликов экрана в WPF или Silverlight

Я ищу способ создать эффект "это будет круто" для полноэкранного приложения WPF, над которым я работаю, - эффект "отблеска экрана", который анимируется или перемещается по всему экрану, создавая эффект сияющего отображения . Я думаю о создании большого прямоугольника с выделенным градиентом и прозрачным фоном, который можно было бы анимировать по всему экрану. Есть идеи, как это можно эффективно сделать в XAML?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
3 558
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Любую прозрачную панель легко разместить «поверх» основной сетки и анимировать элемент, размещенный на панели. Чтобы разместить панель «сверху», просто поместите ее в конце иерархии XAML после любого другого элемента. В качестве альтернативы вы можете использовать свойство «ZIndex».

Лоран

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

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

Если вы измените только альфа, он все равно будет кликабельный, даже если вы не видите цвет.

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

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

Ответ принят как подходящий

Я придумал решение, которое выглядит довольно неплохо. Пример кода XAML, который я записал в Blend 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);

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

Если есть интерактивные элементы управления, вам нужно добавить IsHitTestVisible = "False" на холст.

Tomáš Kafka 20.07.2011 15:08

Другие вопросы по теме