2014-11-26 4 views
1

표준 Windows 양식과 같이 왜 이렇게 복잡한 지 잘 모르겠지만 아래 코드는 정상적으로 작동합니다. 하지만 어쨌든.이미지가 흐릿 해짐 - C# WPF

이미지를 페이드 아웃 한 다음 페이드 아웃하려고합니다. 그 순간 나는 심지어 페이드 인 (fade in)을 할 수 없으며, 내가 잘못하고있는 것을 확신하기 때문에 나는 아주 바보 같다. for 루프는 작동하지만 이미지 불투명도는 99에 도달하고 갑자기 변경 될 때까지 변경되지 않습니다. 이것이 제게 화를 내고 있기 때문에 제발 도와주세요.

namespace WpfApplication2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void dispatcherTimer_Tick(object sender, EventArgs e) 
     { 
     for (int i = 1; i <+ 100; i++) 
     { 
      Logo.Opacity = i; 
      label1.Content = i;      
     } 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
     System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); 
     dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
     dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 10); 
     dispatcherTimer.Start(); 
     } 
    } 
} 
+4

불투명도 속성에 DoubleAnimation을 사용하는 것이 좋습니다. – Clemens

+0

나는 그것이 무엇인지 알았다고 말하면 거짓말 쟁이가 될 것입니다. 나는 그것을 조사 할 것이다. –

답변

2

난 당신이 얻고 싶은 정확히 동작을 모른다, 그러나 WPF에서는 애니메이션을 사용해야합니다. 아마도 매개 변수를 변경해야합니다.

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    DoubleAnimation da = new DoubleAnimation 
    { 
     From = 0, 
     To = 1, 
     Duration = new Duration(TimeSpan.FromSeconds(1)), 
     AutoReverse = true 
    }; 
    Logo.BeginAnimation(OpacityProperty, da); 
} 
+0

DoubleAnimation이 유효하지 않은 것으로 나타났습니다. 추가 사용 명세서를 추가해야합니까? –

+0

'using System.Windows.Media.Animation; ' – Fratyx

+0

건배 :) 놀랍게도 작동합니다. 사용 가능한 모든 매개 변수에 대한 MS 참조가 있습니까? 나는 페이드 인 (fade in)을하고, 잠시 머물러 있고, 그 다음엔 그냥 가야한다. :) –

1

불투명도는 0.0 - 1.0 범위 인 double입니다. 그래서 루프는 이와 같아야합니다.

for (double i = 0.0; i <= 1.0; i+=0.01) 
{ 
    Logo.Opacity = i; 
    label1.Content = i; 
} 

그러나 클레멘스 (Clemens)는 지적했듯이 또한 작동하지 않습니다. 짧은 루프로 전체 루프를하고 있습니다. 당신은 타이머 틱 당 하나 개 증가 수행해야합니다

double CurrentOpacity = 0.0; 
private void dispatcherTimer_Tick(object sender, EventArgs e) 
{ 
    CurrentOpacity += 0.01; 
    if(CurrentOpacity <= 1.0) 
    { 
     Logo.Opacity = CurrentOpacity; 
     label1.Content =CurrentOpacity; 
    } 
    else 
    { 
     dispatcherTimer.Stop(); 
    } 
} 
+0

이것은 여전히 ​​UI 스레드를 차단하므로 불투명도가 최종적으로 1.0이라는 점을 제외하면 시각 효과가 없습니다. – Clemens

+0

@Clemens 맞아, 나는 불투명도 범위에 집중하여 다른 문제를 완전히 놓쳤다. brb –

관련 문제