2015-01-08 8 views
0

Border에서 상속 된 사용자 지정 클래스의 배경에 브러시 색상을 애니메이션으로 적용하려고합니다.WPF 테두리 배경색 애니메이션

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.coloranimation.aspx

이 정확히 내가 무엇을 찾고 아니라, 오류없이 포인트에 저를 얻을 수 있지만, 여전히 아무것도 애니메이션되지 않은 : 나는 여기 MSDN 링크를 시도했습니다. 이 예제의 문제점은 직사각형이 아닌 클래스 내에서 논리를 정의한다는 것입니다. 사각형 (실제로는 테두리) 내에서 정의하려고합니다.

다음은 내 상황을 MSDN에서 추정하려고 시도한 코드입니다. MouseEvent입니다에서

public class PrettyButton : System.Windows.Controls.Border 
{ 
    private System.Windows.Media.SolidColorBrush hoverColor = new System.Windows.Media.SolidColorBrush(); 
    private System.Windows.Media.SolidColorBrush origColor = new System.Windows.Media.SolidColorBrush(); 
    private System.Windows.Media.Animation.Storyboard story = new System.Windows.Media.Animation.Storyboard(); 

    public PrettyButton() 
    { 
     hoverColor.Color = System.Windows.Media.Color.FromArgb(255, 50, 200, 0); 
     origColor.Color = System.Windows.Media.Color.FromArgb(0, 0, 0, 0); 

     this.MouseEnter += PrettyButton_MouseEnter; 
     this.MouseLeave += PrettyButton_MouseLeave; 

     //Animate in logic 
     System.Windows.Media.Animation.ColorAnimation color = new System.Windows.Media.Animation.ColorAnimation(hoverColor.Color, System.TimeSpan.FromMilliseconds(400)); 
     System.Windows.Media.Animation.Storyboard.SetTargetProperty(color, new System.Windows.PropertyPath(System.Windows.Media.SolidColorBrush.ColorProperty)); 

     story.Children.Add(color);    
    } 

아래 나는 흔적 나를 위해 차가운왔다 있도록

void PrettyButton_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
     story.Begin(this);    
    } 

불행하게도, 나는 더 이상 오류를받지 못했습니다 있습니다. 또한 XAML에서 10 가지 솔루션을 찾을 수 있다고 확신하지만 앞으로이 클래스를 재사용 할 수 있기를 바랍니다.이 논리를 재정의하는 것이 이상적이지는 않습니다.

답변

1

System.Windows.Media.SolidColorBrush.ColorProperty 대신 "(Border.Background).(SolidColorBrush.Color)" 속성 경로를 설정해보십시오.

System.Windows.Media.Animation.Storyboard.SetTargetProperty(color, new System.Windows.PropertyPath("(Border.Background).(SolidColorBrush.Color)")); 

의이 등의 PrettyButton constructorBackground을 설정

public PrettyButton() 
{ 
    ..... 
    origColor.Color = System.Windows.Media.Color.FromArgb(0, 0, 0, 0); 
    this.Background= new SolidColorBrush(origColor.Color); 
    .. 
    .... 

} 

UPDATE :

public class PrettyButton : System.Windows.Controls.Border 
{ 
    private System.Windows.Media.SolidColorBrush hoverColor = new System.Windows.Media.SolidColorBrush(); 
    private System.Windows.Media.SolidColorBrush origColor = new System.Windows.Media.SolidColorBrush(); 


    public PrettyButton() 
    { 
     hoverColor.Color = System.Windows.Media.Color.FromArgb(255, 50, 200, 0); 
     origColor.Color = System.Windows.Media.Color.FromArgb(0, 0, 0, 0); 

     this.Background= new SolidColorBrush(origColor.Color); 
     this.MouseEnter += PrettyButton_MouseEnter; 
     this.MouseLeave += PrettyButton_MouseLeave; 

    } 

    private void PrettyButton_MouseLeave(object sender, MouseEventArgs e) 
    { 
     System.Windows.Media.Animation.Storyboard story = new System.Windows.Media.Animation.Storyboard(); 
     System.Windows.Media.Animation.ColorAnimation color = new System.Windows.Media.Animation.ColorAnimation(origColor.Color, System.TimeSpan.FromMilliseconds(400)); 
     System.Windows.Media.Animation.Storyboard.SetTargetProperty(color, new System.Windows.PropertyPath("(Border.Background).(SolidColorBrush.Color)")); 

     story.Children.Add(color); 
     story.Begin(this); 
    } 

    private void PrettyButton_MouseEnter(object sender, MouseEventArgs e) 
    { 
     System.Windows.Media.Animation.Storyboard story = new System.Windows.Media.Animation.Storyboard(); 
     System.Windows.Media.Animation.ColorAnimation color = new System.Windows.Media.Animation.ColorAnimation(hoverColor.Color, System.TimeSpan.FromMilliseconds(400)); 
     System.Windows.Media.Animation.Storyboard.SetTargetProperty(color, new System.Windows.PropertyPath("(Border.Background).(SolidColorBrush.Color)")); 

     story.Children.Add(color); 
     story.Begin(this); 
    } 
} 
+0

이것은 mouseEnter에 InvalidOperationException' '를 발생한다. 'BorderBrush'는'DeependancyObject' 경로 ('Border.BorderBrush)를 가리 키지 않습니다. (SolidColorBrush.Color)' –

+0

this.BorderBrush = new SolidColorBrush (origColor.Color); 이 라인을 생성자에 넣으십시오 ... –

+0

이것은 오류는 수정하지만 애니메이션은 수정하지 않습니다. –