2013-04-25 2 views
2

UIElement의 Background 속성을 설정하는 일반적인 방법을 찾으려고합니다.UIElement 또는 보낸 사람의 배경 얻기

나는 많은 행운을 가지고 있지 않다 ...

는 여기에 지금까지합니다 (BackgroundProperty를 얻기 위해 반사를 사용하려고 시도) 한 내용입니다.

Action<UIElement> setTheBrushMethod = (UIElement x) => 
    { 
    var brush = new SolidColorBrush(Colors.Yellow); 
    var whatever = x.GetType().GetField("BackgroundProperty"); 
    var val = whatever.GetValue(null); 
    ((UIElement)x).SetValue(val as DependencyProperty, brush); 
    brush.BeginAnimation(SolidColorBrush.ColorProperty, new ColorAnimation(Colors.White, TimeSpan.FromSeconds(3))); 
    }; 
    setTheBrushMethod(sender as UIElement); 

것은 그것이 TextBlock이 같은 뭔가를 작동하지만 StackPanel의 또는 버튼과 같은 작동하지 않습니다 ...입니다.

"무엇이든"은 StackPanel 또는 Button에 대해 null이됩니다.

배경을 일반적으로 설정하는 쉬운 방법이 있어야한다고 생각합니다. 나는 분명히 분실 했습니까?

Background는 System.Windows.Controls.Control에서만 사용할 수있는 것으로 보입니다.하지만 그걸 캐스팅 할 수 없습니다. 여기

var whatever해야한다 무엇 아니라 BackgroundPropertyDependencyProperty에 당신이 Background재산를 찾고 있습니다 :

+0

음 ... 스타일을 사용 해본 적이 있습니까? – failedprogramming

답변

4

귀하의 반사 호출은 실제로 잘못

var whatever = x.GetType().GetProperty("Background").GetValue(x); 
x.GetType().GetProperty("Background").SetValue(x, brush); 

그리고이 작동합니다 fine

사이드 노트 :

난 강력 훨씬 쉽게 또한

을, 왜이 수 읽기 당신은 쓸모없는 var 제거하는 조언과 코드를 만들 것입니다 당신을 기다리고 있습니다 실제의 형태 (이 경우에는 Brush를) 쓰기 Control에서 작동하고 UIElement에서 작동하지 않습니까? 꽤 희귀하게 보입니다.

건배!

+0

건배! 이것은 효과가 있었다. 메모에 회신 : 1. var는 내가 ReSharper에서 가져온 나쁜 습관입니다. 동의했다. 2. attachProperty에서 실제로 메타 데이터 변경 이벤트의 일부이기 때문에 UIElement가 필요합니다. 주어진 UIElement의 펄싱을 트리거하는 RoutedEvent attachedProperty가 있습니다. 인터넷을 통해 설명하기가 어렵습니다. 귀하의 도움은 매우 감사하겠습니다. – tronious