Aracılığıyla paylaş


Properties penceresini özelleştirme

İçinde kendi etki alanına özgü dil (dsl) görünüm ve davranış özelliklerini penceresinin özelleştirebilirsiniz Visual Studio.dsl tanımınızı etki alanı özellikleri her etki alanı sınıfını tanımlar.Bir Diyagram üzerinde veya Model Explorer sınıfının bir örneği seçtiğinizde varsayılan olarak, her etki alanı özelliği properties penceresinde listelenir.Bunları Diyagram Şekil alanlarına eşlediğiniz değilse bile, bu bkz: etki alanı özelliklerinin değerlerini düzenlemenizi sağlar.

Adları, açıklamalar ve kategoriler

Adı ve görünen ad.Bilgisayarınız bir etki alanı özellik tanımında özelliğin görünen adını zamanında properties penceresinde görünen adıdır.Bunun aksine, özelliği güncelleştirmek için program kodunu yazdığınızda adı kullanılır.Adın doğru bir clr alfasayısal adı olması gerekir, ancak görüntü adı boşluk içeremez.

dsl tanımında bir özelliğin adını ayarladığınızda, görüntü adını adı bir kopyasını otomatik olarak ayarlanır.Görünen ad "FuelGauge" gibi bir Pascal cased adı yazarsanız, otomatik olarak bir boşluk içerecektir: "Akaryakıt".Ancak, görünen ad açıkça başka bir değere ayarlayabilirsiniz.

Açıklama.Bir etki alanı özellik açıklaması, iki ayrı yerde görünür:

  • Kullanıcı özellik seçtiğinde properties penceresinin alt.Kullanıcı özelliği temsil eden açıklamak için kullanabilirsiniz.

  • Oluşturulan program kodu.API belgelerine ayıklamak için belge özelliklerini kullanırsanız, bu özellikte bir API açıklaması olarak görünür.

Category.Bir kategori, Properties penceresinde üstbilgisidir.

Stil özelliklerini gösteriyor

Bazı grafik öğelerini dinamik özelliklerini temsil edilebilir veya maruz etki alanı özellikleri olarak.Bu şekilde kullanıma sunulan bir özelliği kullanıcı tarafından güncelleştirilebilir ve daha fazla program koduna göre kolayca güncelleştirilebilir.

Shape sınıfı dsl tanımında sağ tıklatın, üzerine Eklemek maruzve bir özellik seçin.

Şekillerin getirebilir FillColor, OutlineColor, TextColor, OutlineDashStyle, OutlineThickness ve FillGradientMode özellikleri.Bağlayıcı bulunan getirebilir renk,TextColor, DashStyle, ve kalınlığı özellikleri.Diyagram üzerinde getirebilir FillColor ve TextColor özellikleri.

İletim: İlgili öğeleri özelliklerini görüntüleme

dsl kullanıcı bir modeli içinde bir öğe seçtiğinde, bu öğenin özellikleri properties penceresinde görüntülenir.Bununla birlikte, belirtilen ilgili öğeleri özelliklerini görüntüleyebilirsiniz.Birlikte çalışan bir grup öðenin tanımladıysanız, bu yararlıdır.Örneğin, bir ana öğe ve isteğe bağlı eklenti öğenin tanımlayabilirsiniz.Ana öğe bir şekle eşleştirilir ve diğer değil, bir öğede yokmuş gibi tüm özelliklerini görmek yararlıdır.

Bu efekt adlı iletme özelliği, ve bazı durumlarda otomatik olarak gerçekleşir.Diğer durumlarda, bir etki alanı türü tanımlayıcısını tanımlayarak iletme özelliğini elde edebilirsiniz.

Cc512860.collapse_all(tr-tr,VS.110).gifVarsayılan özellik iletme durumlar

Kullanıcı, Explorer'da bir şekil veya bağlayıcı ya da bir öğe seçtiğinde, aşağıdaki özellikleri Properties penceresinde görüntülenir:

  • Model öğesinin temel sınıflarında tanımlandıkları olanlar da dahil olmak üzere etki alanı sınıfında tanımlı etki alanı özellikleri.Bir özel durum ayarlamak için etki alanı özellikleri, Olan göz için False.

  • 0..1 İþlenenlerle olan ilişkileri ile bağlantılı öğelerinin adları.Bağlayıcı eşleme ilişki için tanımlı değil ise isteğe bağlı olarak görme, kullanışlı bir yöntem öğeleri bağlı sağlar.

  • Etki alanı özellikleri gömme ilişkinin öğe hedefler.Gömme ilişkiler genellikle açıkça görüntülenmez, çünkü bu özellikleri görmesini sağlar.

  • Seçili şekli veya bağlayıcı üzerinde tanımlı etki alanı özellikleri.

Cc512860.collapse_all(tr-tr,VS.110).gifİletme özelliği ekleme

Bir özellik iletmek için bir etki alanı türü tanımlayıcısı tanımlayın.Etki alanı sınıfları iki etki alanı ilişkisi varsa, etki alanı türü tanımlayıcısı etki alanı özellik domain özelliği ikinci etki alanı sınıfındaki ilk sınıfının değerine ayarlamak için kullanabilirsiniz.Örneğin, bir kitap etki alanı ve bir yazar etki sınıflarını arasında bir ilişki varsa, etki alanı türü tanımlayıcısı bir kitabın yazarı Name özelliği Properties penceresinde kullanıcı rehberi seçtiğinde görünür hale getirmek için kullanabilirsiniz.

[!NOT]

Kullanıcı bir modeli düzenlerken iletme özelliği Properties penceresini etkiler.Domain özelliği alıcı sınıfını tanımlamıyor.dsl tanımı diğer bölümlerinde veya program kodunu iletilen etki alanı özelliğine erişmek istiyorsanız, iletme öğesine erişmek gerekir.

Aşağıdaki yordamda, bir dsl oluşturduğunuz varsayılmaktadır.İlk birkaç adım Önkoşullar özetlenmektedir.

Başka bir öğeden bir özellik iletmek için

  1. Oluşturma bir Etki Alanına Özel Dil Araçları , kitap ve yazar adı verilen bu örnekte, en az iki sınıf içerir çözüm.Her iki tür kitap ve yazar arasında bir ilişki olmalıdır.

    Her kitap bir yazar olacak biçimde Kaynak rolü (kitap tarafındaki rolü) iþlenenlerle, 0..1 veya 1..1, olmalıdır.

  2. İçinde dsl Explorer, kitap etki sınıfı sağ tıklatın ve sonra ' Yeni DomainTypeDescriptor ekleme.

    Adlı bir düğüm Özel özellik tanımlayıcıları yolları altında görünen Özel tür tanımlayıcı düğüm.

  3. Sağ Özel tür tanımlayıcı düğümü tıklatın ve sonra Yeni PropertyPath ekleme.

    Altında yeni bir özellik yolu görünür Özel özellik tanımlayıcıları yolları düğüm.

  4. Yeni özellik yolu seçin ve özelliklerini penceresinde, özelliği yoluna uygun modeli öğesinin yolu.

    Bu özelliği sağındaki aşağı oku tıklatarak yolu ağaç görünümünde düzenleyebilirsiniz.Etki alanı yolları hakkında daha fazla bilgi için bkz: Etki alanı yol sözdizimi.Yol düzenlemiş olduğunuz zaman benzer BookReferencesAuthor.Author/!Yazar.

  5. Set özelliği için Name domain özelliği yazar.

  6. Set görünen ad yazar adı.

  7. Tüm şablonları dönüştürme, yapı ve dsl çalıştırın.

  8. Bir model diyagramı bir kitap Yazar, oluşturun ve bunları başvuru ilişkisini kullanarak bağlayabilirsiniz.Kitap öğesini seçin ve Properties penceresinde kitap özelliklerine ek olarak yazar adını görmeniz gerekir.Bağlantılı yazar adını değiştirme veya başka bir yazar kitap bağlamak ve gözlemek kitap yazar adını değiştirir.

Özel özellik Düzenleyicileri

Property penceresinde düzenleme deneyimi özellik türü, her etki alanı için uygun bir varsayılan sağlar.Örneğin, bir enum türü için kullanıcı aşağı açılan listesini görür ve sayısal bir özellik için kullanıcı basamak girebilirsiniz.Bu yalnızca yerleşik türleri için geçerlidir.Harici bir türü belirtirseniz, kullanıcının özellik değerleri görebilir ama düzenlemek değil mümkün olacaktır.

Bununla birlikte, aşağıdaki Düzenleyicileri ve türlerini belirtebilirsiniz:

  1. Standart bir türü ile kullanılan başka bir düzenleyici.Örneğin, bir dosya yolu Düzenleyici bir dize özelliği belirtebilirsiniz.

  2. Domain özelliği ve bunun için bir düzenleyici için harici bir türü.

  3. A.net Düzenleyicisi olarak dosya yolu düzenleyici veya kendi özel özellik düzenleyicisini oluşturabilirsiniz.

    Harici bir türü ve varsayılan düzenleyici sahip dize gibi bir türü arasında dönüştürme.

dsl içinde bir dış türü (Boolean veya Int32 gibi) basit türler veya dize olmayan herhangi bir tür.

Harici bir türe sahip bir etki alanı özellik tanımlamak için

  1. İçinde Solution Explorer, dış tipini içeren (dll) derleme başvurusu Ekle Dsl proje.

    Derleme olabilir bir.net derleme veya sizin tarafınızdan sağlanan bir derleme.

  2. Türü eklemek Etki alanı türleri bunu yapmış olduğunuz sürece listeleyin.

    1. DslDefinition.dsl, açma ve dsl Explorer, kök düğümünü sağ tıklatın ve sonra ' Yeni dış türü Ekle.

      Altında yeni bir girdi görüntülenir Etki alanı türleri düğüm.

      Uyarı notuUyarı

      Menü öğesi dsl kök düğümü değil Etki alanı türleri düğüm.

    2. Ve ad alanına yeni türünün Özellikleri penceresinde ayarlayın.

  3. Domain özelliği, her zamanki şekilde bir etki alanı sýnýfýna ekleyin.

    Properties penceresinde dış aşağı açılan listesinde seçin türü alan.

Bu aşamada kullanıcılar özellik değerlerini görüntüleyebilir, ancak onu düzenleyemezsiniz.Görüntülenen değerleri elde edilen ToString() işlevi.Bir komut veya kural özelliğinin değeri örneğin ayarlar program kodu yazabilirsiniz.

Cc512860.collapse_all(tr-tr,VS.110).gifÖzellik Düzenleyici ayarlama

Domain özelliği aşağıdaki biçimde bir clr özniteliği ekleyin:

[System.ComponentModel.Editor (
   typeof(AnEditor),
   typeof(System.Drawing.Design.UITypeEditor))]

Bir özellik özniteliği kullanarak ayarlayabilirsiniz Özel öznitelik Properties penceresinde girdi.

Tür AnEditor ikinci parametresinde belirtilen türünden türetilmesi gerekir.İkinci parametre ya da olması gereken UITypeEditor veya ComponentEditor.Daha fazla bilgi için bkz. EditorAttribute.

Kendi Düzenleyicisi'ni veya bir düzenleyici tarafından belirtmek .NET Framework, gibi FileNameEditor veya ImageEditor.Örneğin, kullanıcı bir dosya adı girmek için bir özellik için aşağıdaki yordamı kullanın.

Bir dosya adı etki alanı özellik tanımlamak için

  1. dsl tanımınızı bir etki alanı sınıfta domain özelliği ekleyin.

  2. Yeni özellik seçin.İçinde Özel öznitelik alanına Properties penceresinde, aşağıdaki öznitelik.Bu özniteliği girmek için üç nokta tıklatın [...] sonra öznitelik adı ve parametreler ayrı olarak girin:

    [System.ComponentModel.Editor (
       typeof(System.Windows.Forms.Design.FileNameEditor)
       , typeof(System.Drawing.Design.UITypeEditor))]
    
  3. Domain özelliği türü, varsayılan ayarında bırakın dize.

  4. Düzenleyicisi'ni sınamak için kullanıcılar kendi etki alanı özelliğini düzenlemek için dosya adı Düzenleyicisi'ni açabilirsiniz doğrulayın.

    1. ctrl + F5 veya F5 tuşuna basın.Hata ayıklama çözümde bir sınama dosyası açın.Etki alanı sınıfının bir öğe oluşturun ve dosyayı seçin.

    2. Domain özelliği Properties penceresinde seçin.Üç nokta değeri alanda [...].

    3. Üç noktayı tıklatın.Dosya iletişim kutusu görüntülenir.Bir dosya seçin ve iletişim kutusunu kapatın.Dosya yolu şimdi domain özelliği değeridir.

Cc512860.collapse_all(tr-tr,VS.110).gifKendi özellik Düzenleyici tanımlama

Kendi Düzenleyici tanımlayabilirsiniz.Kullanıcı ya da tanımladığınız bir türü düzenlemek veya standart bir tür özel bir şekilde düzenlemek için izin vermek için bunu.Örneğin, bir formül temsil eden bir dize girmek kullanıcı izin verebilir.

Bir düzenleyici tarafından türetilmiş bir sınıf yazarak tanımlamak UITypeEditor.Kullanacağınız sınıf geçersiz kılmanız gerekir:

  • EditValue, kullanıcıyla etkileşime ve özellik değerini güncelleştirmek için.

  • GetEditStyle, düzenleyiciniz veya bir iletişim kutusunu aç aþaðý açýlan menüsünü sağlamak belirtmek için.

Özellik kılavuzunda görüntülenen özelliğin değeri grafik gösterimi sağlar.Bunu yapmak için geçersiz kılmak GetPaintValueSupported, ve PaintValue.Daha fazla bilgi için bkz. UITypeEditor.

[!NOT]

Ayrı kod dosyasında aşağıdaki kodu ekleyip Dsl proje.

Örne?in:

internal class TextFileNameEditor : System.Windows.Forms.Design.FileNameEditor
{
  protected override void InitializeDialog(System.Windows.Forms.OpenFileDialog openFileDialog)
  {
    base.InitializeDialog(openFileDialog);
    openFileDialog.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*";
    openFileDialog.Title = "Select a text file";
  }
}

Bu düzenleyiciyi kullanmak için set Özel öznitelik bir etki alanı özelliği:

[System.ComponentModel.Editor (
   typeof(MyNamespace.TextFileNameEditor)
   , typeof(System.Drawing.Design.UITypeEditor))]

Daha fazla bilgi için bkz. UITypeEditor.

Değerleri aşağı açılan listesini sağlayan

Bir kullanıcının aralarından seçim değerler listesi sağlar.

[!NOT]

Bu teknik çalışma zamanında değiştirebilirsiniz değerler listesi sağlar.Değişmez bir liste sağlamak istiyorsanız, bunun yerine düşünün bir enum türü kendi etki alanı özellik türünü kullanarak.

Standart değerler listesini tanımlamak için aşağıdaki biçime sahip bir clr özniteliği kendi etki alanı özellik ekleyin:

[System.ComponentModel.TypeConverter 
(typeof(MyTypeConverter))]

Türetildiği sınıfı tanımla TypeConverter.Ayrı bir dosyada aşağıdaki kodu ekleyip Dsl proje.Örne?in:

/// <summary>
/// Type converter that provides a list of values 
/// to be displayed in the property grid.
/// </summary>
/// <remarks>This type converter returns a list 
/// of the names of all "ExampleElements" in the 
/// current store.</remarks>
public class MyTypeConverter : System.ComponentModel.TypeConverter
{
  /// <summary>
  /// Return true to indicate that we return a list of values to choose from
  /// </summary>
  /// <param name="context"></param>
  public override bool GetStandardValuesSupported
    (System.ComponentModel.ITypeDescriptorContext context)
  {
    return true;
  }

  /// <summary>
  /// Returns true to indicate that the user has 
  /// to select a value from the list
  /// </summary>
  /// <param name="context"></param>
  /// <returns>If we returned false, the user would 
  /// be able to either select a value from 
  /// the list or type in a value that is not in the list.</returns>
  public override bool GetStandardValuesExclusive
      (System.ComponentModel.ITypeDescriptorContext context)
  {
    return true;
  }

  /// <summary>
  /// Return a list of the values to display in the grid
  /// </summary>
  /// <param name="context"></param>
  /// <returns>A list of values the user can choose from</returns>
  public override StandardValuesCollection GetStandardValues
      (System.ComponentModel.ITypeDescriptorContext context)
  {
    // Try to get a store from the current context
    // "context.Instance"  returns the element(s) that 
    // are currently selected i.e. whose values are being
    // shown in the property grid. 
    // Note that the user could have selected multiple objects, 
    // in which case context.Instance will be an array.
    Store store = GetStore(context.Instance);

    List<string> values = new List<string>();

    if (store != null)
    {
      values.AddRange(store.ElementDirectory
        .FindElements<ExampleElement>()
        .Select<ExampleElement, string>(e => 
      {
        return e.Name;
      }));
    }
    return new StandardValuesCollection(values);
  }

  /// <summary>
  /// Attempts to get to a store from the currently selected object(s)
  /// in the property grid.
  /// </summary>
  private Store GetStore(object gridSelection)
  {
    // We assume that "instance" will either be a single model element, or 
    // an array of model elements (if multiple items are selected).

    ModelElement currentElement = null;

    object[] objects = gridSelection as object[];
    if (objects != null && objects.Length > 0)
    {
      currentElement = objects[0] as ModelElement;
    }
    else
    {
        currentElement = gridSelection as ModelElement;
    }

    return (currentElement == null) ? null : currentElement.Store;
  }

}

Ayrıca bkz.

Kavramlar

Gezinme ve Program kodunda bir modeli güncelleştiriliyor