2008-10-10 3 views
5

전 화면 WPF 응용 프로그램에 대해 "멋지게 보입니다"효과를 만들 수있는 방법을 찾고 있는데, 그 효과는 움직이거나 움직이는 "화면 반짝임"효과입니다 반짝이는 디스플레이 경험을 제공하는 전체 화면. 하이라이트 된 그라디언트와 투명한 배경을 가진 큰 사각형을 만드는 것이 생각 중입니다.이 배경은 화면에서 움직일 수 있습니다. 이 방법을 XAML에서 효과적으로 수행 할 수있는 아이디어가 있습니까?WPF 또는 Silverlight의 화면 반짝임 효과

답변

5

나는 꽤 좋은 솔루션을 생각해 냈습니다. 나는 혼합 2.0 SP1에서 돌리고 일부 샘플 XAML은 다음과 같습니다

<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 가속도를 얻었다면 약간의 흐려짐을 시도해 볼 수 있습니다. 코드를 조정하고 사각형을 숨기거나 표시해야 할 수도 있지만 기본적으로이 코드가 적용됩니다.

+1

대화 형 컨트롤이있는 경우 캔버스에'IsHitTestVisible = "False"를 추가해야합니다. –

2

메인 그리드의 "상단"에 투명한 패널을 배치하고 패널에 배치 된 요소에 애니메이션을 적용하는 것은 쉽습니다. 패널을 "맨 위에"놓으려면 XAML 계층의 끝에 다른 요소 다음에 배치하기 만하면됩니다. 또는 "ZIndex"속성을 사용할 수 있습니다.

로랑은

0

당신은 LBugnion 말한 것처럼 상단에 투명 패널을 넣을 수 있습니다,하지만 당신이 할 수있는 많은 방법이 있습니다 잊지 마세요 :

  1. 변경 숨겨진에 대한 패널의 가시성.
  2. 변경 0

0으로

  • 변경 색상의 알파에 불투명도 당신은 여전히 ​​당신이 색깔을보고하지 않아도 클릭 인 알파를 변경하는 경우.

    주제에서 벗어나지 만 : 미묘한 효과를 내기 위해 켜기/끄기 옵션을 설정하십시오.

  • 0

    진도 막대의 this article에 첨부 된 비스타 스타일 진행률 표시 줄에는 비스타 스타일의 반짝임이있는 샘플 코드가 있습니다. 테두리 및 브러시와 변환기를 사용하여 애니메이션을 만듭니다. 나는 거기에있는 모든 것을 완전히 이해한다고 말할 수는 없지만 훌륭하게 작동합니다. 필요에 따라 쉽게 복사 할 수 있어야합니다.