我有一个关于在WPF网格中命名SharedSizeGroups
的问题主要是出于好奇。我在MSDN注意到他们列出了对组名字符串的限制:
SharedSizeGroup属性值必须满足以下规则:
- 一定不能为空。
- 只能由字母,数字和下划线字符组成。
- 不得以数字值开头。
我有一些用数字命名的组(“1”,“2”,“3”等)并且从未遇到任何问题。仅仅为了踢,我将一些组重命名为“, - []”之类的东西,它们仍然有效。所以这些规则没有得到执行,似乎没有必要。有人知道文档中规则的原因吗?这些名称是否可能与WPF内部正在做的事情发生冲突?
编辑:好的,所以WPF确实执行了它,验证只是不会在我的非编译模板中激活。
答案 0 :(得分:3)
有趣的是,我看了一下Reflection中的DefinitionBase类和SharedSizeGroup属性。
它创建一个依赖项属性,其验证回调定义如下:
SharedSizeGroupProperty = DependencyProperty.Register("SharedSizeGroup", typeof(string), typeof(DefinitionBase), new FrameworkPropertyMetadata(new PropertyChangedCallback(DefinitionBase.OnSharedSizeGroupPropertyChanged)), new ValidateValueCallback(DefinitionBase.SharedSizeGroupPropertyValueValid));
private static bool SharedSizeGroupPropertyValueValid(object value)
{
if (value == null)
{
return true;
}
string str = (string)value;
if (str != string.Empty)
{
int num = -1;
while (++num < str.Length)
{
bool flag = char.IsDigit(str[num]);
if (((num == 0) && flag) || ((!flag && !char.IsLetter(str[num])) && ('_' != str[num])))
{
break;
}
}
if (num == str.Length)
{
return true;
}
}
return false;
}
我对此进行了测试,实际上对包含非数字,非alpha,非下划线字符的任何内容都返回false。对于以数字开头的任何组,它也返回false。所以它似乎遵循一般变量名称规则..
我的猜测是,这很可能会引发某种异常,但也许正在处理中。你检查过输出窗口了吗?
我尝试了一个无效的名字,我得到了一个XAMLParseException。