我的UI是使用大量可翻译的用户控件构建的。不应翻译usercontrols中的某些控件,我想用[DoNotTranslate]`自定义属性标记它们。
在我的userControl.designer.cs文件中
[DoNotTranslate]
private DevExpress.XtraEditors.LabelControl maxLabel;
[DoNotTranslate]
private DevExpress.XtraEditors.LabelControl valueLabel;
//all other controls
翻译函数需要一个(用户)控件,然后遍历所有子control.Controls
以确保所有控件都被翻译,而无需在每个控件上调用翻译函数。
是否可以找出控件是否设置了自定义属性?问题是当我浏览所有控件时,我看不到如何在翻译功能中获取属性信息。
非常感谢任何建议,
由于
答案 0 :(得分:2)
编辑:我现在从您发布的代码中看到该属性位于控件的属性上,而不是定义控件本身的类。你可以尝试这样:
public IEnumerable<PropertyInfo> GetNonTranslatableProperties(WebControl control)
{
foreach (PropertyInfo property in control.GetType().GetProperties())
{
if(
property
.GetCustomAttributes(true)
.Count(item => item is DoNotTranslateAttribute) > 0)
yield return property;
}
}
否则,您可以将Label子类化为NonTranslatableLabel,将该属性应用于该类,并在“父”控件中使用它而不是Label。
[NonTranslatable]
public class NonTranslatableLabel : Label
===================
您可以执行以下每个控件:
myCustomControl.GetType()
.GetCustomAttributes(true)
.Where(item => item is DoNotTranslateAttribute);
例如,您可以枚举所有“不可翻译”的控件,如下所示:
public IEnumerable<Control> GetNonTranslatableChildren(Control control)
{
foreach(Control c in control.Controls)
{
if(
c.GetType()
.GetCustomAttributes(true)
.Count(item => item is DoNotTranslateAttribute) > 0)
yield return c;
}
}
答案 1 :(得分:1)
您可以使用GetCustomAttributes方法查明该属性是否已应用。例如,
static readonly Type _DoNotTranslateAttribute = typeof(DoNotTranslate);
.... // other code
var t = control.GetType();
if (t.GetCustomAttributes(_DoNotTranslateAttribute, false).length > 0)
{
// do not translate
}
(免责声明:未经测试/未编译的代码 - 只是为了了解如何使用该功能)