wpfコントロール設計時サポート(1)


この部分はほとんどみんなが無視している内容なので、やはり紹介したいと思います.
本編ソースのダウンロード

1.属性メタデータ


vs IDEではasp.Net,winfromなどの開発環境では,右側のPropertyGrid属性パネルで属性を分類することができ,コントロール属性の用途を理解するのに有利である.
もしあなたが前にいたら.Netプラットフォームの下でコントロールの開発をしたことがあって、あなたはこれらの機能が属性メタデータを通じて実現したことを知っているべきで、例えばCategoryメタデータを使って、Content属性をContentカテゴリの下に分けます.
[Category("Content")]
public object Content { get; set; }

 
この方法はwpfカスタムコントロールの開発において依然として利用可能である.DesginCustomControlというカスタムコントロールを例に挙げます.wpfコントロールであるため、属性は依存項目属性に変更する.
public class DesginCustomControl : ContentControl
{

    [Category("Content")]
    public string Content
    {
        get { return (string)GetValue(ContentProperty); }
        set { SetValue(ContentProperty, value); }
    }

    public static readonly DependencyProperty ContentProperty =
        DependencyProperty.Register("Content", typeof(string), typeof(DesginCustomControl), new UIPropertyMetadata(String.Empty));
   
}

効果は次のとおりです。

2.属性メタデータの集合


 
wpfの設計では、これらのメタデータとコントロール属性を分離することができる.簡単な機能を実現します
2.1設計時にサポートされる個別プロジェクトの新規作成
WPF.Controlsはコントロール項目、WPFです.Controls.VisualStudio.Designはコントロール設計時のアイテムです
注意:
(1)プログラムセット命名規則
設計時のプログラムセットは命名規則があるので、VisualStudioのサポートを受けることができる.コントロールセットがWPFである.Controlsでは、設計時のプログラムセットは
コントロールセットの名前+VisualStudio.Design
(2)設計時のプログラムセットのコンパイル位置
設計時のプログラムセットは、設計時のプログラムセットを参照する必要がなく、コントロールと同じディレクトリに保存する必要があります.
仮にWPF.Controlsのコンパイルディレクトリが変更されていなければ、WPF.Controls.VisualStudio.DesignというプロジェクトはコンパイルされてからWPFに存在する.Controlsのbinディレクトリの下の.
(3)Microsoftを引用する.Windows.Designプログラムセット
Microsoft.Windows.Designはwpf設計時にサポートされる基礎ですので、このプログラムセットを参照してください.
2.2属性のメタデータセットの登録
IregisterMetadataというインタフェースを実装します.コードを見てみましょう
public class WPFControlsCommonMetadata : IRegisterMetadata
{
    public void Register()
    {
        AttributeTableBuilder MainBuilder = new AttributeTableBuilder();
        MainBuilder.AddCustomAttributes(typeof(DesginCustomControl),DesginCustomControl.ContentProperty,new Attribute[]{
                     new CategoryAttribute("Content")});
        MetadataStore.AddAttributeTable(MainBuilder.CreateTable());
    }
}

 
AttributeTable Builderは属性メタデータテーブル、msdnは解釈属性テーブルである.AttributeTable Builderには複数のAddCustomAttributesリロード方法がある.属性にメタデータを付加することができる.例えば、上記のコードはDesginCustomControlのContent属性にCategoryAttributeメタデータを追加する.追加してから
MetadataStoreのAddAttributeTableメソッドは属性メタデータテーブルを追加する.MetadataStoreをメタデータ記憶領域と呼ぶ.
以上のコードの実現は、コントロールに直接メタデータラベルを掛ける効果と同様である.どんな違いがありますか.
私たちがaspならNetの内蔵コントロール拡張設計の場合、そのコントロールを継承する必要がある.ここではこの問題はなく、両者は完全に分離されている.
2.3属性メタデータの追加遅延
上記の例では、MainBuilderクラスで直接コントロールにメタデータを追加するが、比較的多くのコントロールにメタデータを追加すると同時にロードするとパフォーマンスに問題が発生するため、MainBuilderはAddCallbackメソッドを提供し、必要に応じてコントロールにメタデータを追加する.次に、上記のサンプルコードを以下のように変更します.
public class WPFControlsCommonMetadata : IRegisterMetadata
{
    public void Register()
    {
        AttributeTableBuilder MainBuilder = new AttributeTableBuilder();
        MainBuilder.AddCallback(
             typeof(DesginCustomControl),
             delegate(AttributeCallbackBuilder builder)
             {
                 builder.AddCustomAttributes(DesginCustomControl.ContentProperty, new Attribute[]{
                     new CategoryAttribute("Content")});
                 
             });
        MetadataStore.AddAttributeTable(MainBuilder.CreateTable());
    }
}

 
とてもつまらないと感じて、このようなもののためにまた研究しなければなりません:)、役に立つと思ったのは见てみましょう、この编はこんなに多く书いて、书き终わって多くなくて休みに家に帰ることができます.