SharedSizeGroup命名规则

时间:2013-01-03 19:00:14

标签: wpf grid

我有一个关于在WPF网格中命名SharedSizeGroups的问题主要是出于好奇。我在MSDN注意到他们列出了对组名字符串的限制:

  

SharedSizeGroup属性值必须满足以下规则:

     
      
  • 一定不能为空。
  •   
  • 只能由字母,数字和下划线字符组成。
  •   
  • 不得以数字值开头。
  •   

我有一些用数字命名的组(“1”,“2”,“3”等)并且从未遇到任何问题。仅仅为了踢,我将一些组重命名为“, - []”之类的东西,它们仍然有效。所以这些规则没有得到执行,似乎没有必要。有人知道文档中规则的原因吗?这些名称是否可能与WPF内部正在做的事情发生冲突?

编辑:好的,所以WPF确实执行了它,验证只是不会在我的非编译模板中激活。

1 个答案:

答案 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。