Wpf SharedSizeGroup命名规则

Wpf SharedSizeGroup命名规则,wpf,grid,Wpf,Grid,我有一个关于在WPF网格中命名SharedSizeGroup的问题,主要是出于好奇。我注意到,他们列出了组字符串名称的限制: SharedSizeGroup属性值必须满足以下规则: 不能是空的 只能由字母、数字和下划线字符组成 不能以数字值开头 我有一些我用数字命名的小组(“1”、“2”、“3”等),他们从来没有遇到过问题。为了好玩,我将一些组重命名为“,-[]”之类的名称,它们仍然有效。因此,这些规则没有得到执行,似乎也没有必要。有人知道文档中规则的原因吗?名称是否可能与WPF内部正在执行

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

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

  • 不能是空的
  • 只能由字母、数字和下划线字符组成
  • 不能以数字值开头
我有一些我用数字命名的小组(“1”、“2”、“3”等),他们从来没有遇到过问题。为了好玩,我将一些组重命名为“,-[]”之类的名称,它们仍然有效。因此,这些规则没有得到执行,似乎也没有必要。有人知道文档中规则的原因吗?名称是否可能与WPF内部正在执行的操作冲突


编辑:好的,所以WPF确实执行了它,毕竟,验证不会在我的未编译模板中触发。

有趣的是,我查看了reflector中的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;
    }
SharedSizeGroupProperty=DependencyProperty.Register(“SharedSizeGroup”、typeof(string)、typeof(DefinitionBase)、new FrameworkPropertyMetadata(new PropertyChangedCallback(DefinitionBase.OnSharedSizeGroupPropertyChanged))、new ValidateValueCallback(DefinitionBase.SharedSizeGroupPropertyValueValid));
私有静态bool SharedSizeGroupPropertyValueValid(对象值)
{
如果(值==null)
{
返回true;
}
字符串str=(字符串)值;
if(str!=string.Empty)
{
int num=-1;
而(++num
我对此进行了测试,对于任何包含非数字、非字母、非下划线字符的内容,它都会返回false。对于以数字开头的任何组,它也返回false。所以它似乎遵循一般的变量名规则

我的猜测是,这很可能引发某种异常,但可能正在处理中。你检查输出窗口了吗


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

真有趣。这显然不是我所期望的。我正在破坏规则的所有网格碰巧都嵌入在数据模板中,所以我直接在窗口的xaml中尝试了它,并且得到了XAMLParseException。加载模板时,输出窗口中没有任何有趣的内容。您是否知道加载未编译的xaml模板时是否应该触发ValidateValueCallbacks?我试着去查这个,但是我找不到任何文件表明它不会。不,我不知道,但是说实话,我不知道为什么这个问题比一点好奇更重要。我是说。。你不会用无效字符命名你的组,对吗?不,我绝对不会,我正在更新我的网格。我现在有点不安,因为使用未编译的资源字典意味着我可能在不知不觉中做了一些无效的事情,但是哦,好吧。谢谢你的帮助!