获取UIElement或发件人的背景

时间:2013-04-25 21:19:17

标签: c# wpf background dependency-properties uielement

我正在尝试找到一种在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上可用,但我无法转换为。

1 个答案:

答案 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?对我来说似乎很少见

干杯!