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 に答える