gpt4 book ai didi

c# - 获取 UIElement 或发送者的背景

转载 作者:行者123 更新时间:2023-12-02 22:05:15 27 4
gpt4 key购买 nike

我正在尝试寻找一种通用方法来设置 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,“whatever”最终为 null。

我还觉得应该有一种简单的方法来通用地设置背景。我是否遗漏了明显的信息?

背景似乎仅在 System.Windows.Controls.Control 上可用,但我无法转换为它。

最佳答案

您的反射调用实际上是错误的:您正在寻找 Background PROPERTY,而不是 BackgroundProperty DEPENDENCYPROPERTY

这是你的 var whatever 应该是什么:

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

这会很好用

边注:

我强烈建议你摆脱无用的 var 并编写你正在等待的实际类型(在本例中,一个 Brush),这将使你的代码更容易阅读

此外,为什么不能只处理 Control 而不是 UIElement ?对我来说似乎很少见

干杯!

关于c# - 获取 UIElement 或发送者的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224920/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com