1

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

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

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

我有一些我用数字命名的组(“1”、“2”、“3”等)并且从来没有遇到过问题。只是为了好玩,我将一些组重命名为“,- []”,它们仍然有效。所以这些规则没有强制执行,似乎也没有必要。有人知道文档中规则的原因吗?名称是否可能与 WPF 在内部执行的操作发生冲突?

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

4

1 回答 1

3

有趣的是,我查看了反射器中的 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;
    }

我对此进行了测试,实际上对于包含非数字、非字母、非下划线字符的任何内容,它都会返回 false。对于以数字开头的任何组,它也会返回 false。所以它似乎遵循一般的变量名规则..

我的猜测是这很可能会引发某种异常,但也许它正在被处理。你检查过输出窗口吗?

我尝试了一个无效的名称,并得到了 XAMLParseException。

于 2013-01-03T19:30:52.183 回答