我正在尝试从通过XML文件读取的数据设置WPF控件(高度,宽度,字体粗细,边距和许多其他控件)的属性。我不会事先知道要设置哪些属性。我想知道是否有人知道如何通过反思来做到这一点?
目前我已设法使用反射分配所有基本类型和枚举类型,但我对FontWeight
,Margin
,Background
等属性有点麻烦以及其他许多需要其他对象来设置属性的例子:要设置按钮的FontWeight
属性,你必须这样做。
button.FontWeight = Fontweights.Bold;
或保证金
button.Margin = new Thickness(10, 10, 10, 10);
由于可以在WPF中的控件上设置可能的150多个属性,我只是想避免使用这种代码。
public void setProperties(String propertyName, string PropertyValue
{
if(propertyName = "Margin")
{
Set the margin.....
}
else if (propertyName = "FontWeight")
{
set the FontWeight....
}
}
等等,可以在WPF控件上设置每个可能的属性。
答案 0 :(得分:1)
在幕后,XAML使用TypeConverter
来从字符串转换为指定的类型。您可以自己使用它们,因为您提到的每种类型都使用TypeConverterAttribute
指定了默认TypeConverter
。您可以像这样使用它(或者,使方法通用):
object Convert(Type targetType, string value)
{
var converter = TypeDescriptor.GetConverter(targetType);
return converter.ConvertFromString(value);
}
然后,以下每个工作都按预期工作:
Convert(typeof(Thickness), "0 5 0 0")
Convert(typeof(FontWeight), "Bold")
Convert(typeof(Brush), "Red")
答案 1 :(得分:1)
实际上非常简单。您将字符串值读取到ViewModel上的属性中,将该视图模型设置为DataContext,并在xaml中绑定属性。 Binding uses TypeConverters automaticall收率
答案 2 :(得分:0)
你可以做这样的事情
typeof(Button).GetProperty("FontWeight").SetValue(button1,GetFontWeight("Bold"), null);
编辑:
您可以使用将字符串转换为属性值的映射函数
FontWeight GetFontWeight(string value)
{
swithc(value)
{
case "Bold" : return FontWeights.Bold; break;
...
}
}