我正在尝试找到一种在UIElement上设置Background属性的通用方法。
我运气不好......
这是我到目前为止所做的(尝试使用反射来获取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或Button这样的东西。
“无论什么”最终为StackPanel或Button都为null。
我也觉得应该有一个简单的方法来一般设置背景。我错过了吗?
后台似乎只在System.Windows.Controls.Control上可用,但我无法转换为。
答案 0 :(得分:5)
您的反映通知实际上是错误的:您正在寻找Background
财产,而不是BackgroundProperty
依赖性
以下是var whatever
:
var whatever = x.GetType().GetProperty("Background").GetValue(x);
x.GetType().GetProperty("Background").SetValue(x, brush);
这样可以正常使用
侧面说明:
我强烈建议你摆脱无用的var
并写下你正在等待的实际类型(在这种情况下,Brush
),这将使你的代码更容易阅读
另外,为什么你不能只使用Control
而不是UIElement
?对我来说似乎很少见
干杯!