Přizpůsobení okna Vlastnosti
Lze přizpůsobit vzhled a chování v okně Vlastnosti domény specifické pro jazyk (DSL) v Visual Studio.Vaše definice DSL definovat vlastnosti domény v každé doméně třídy.Standardně při výběru instancí třídy v diagramu nebo v Průzkumníku modelů je každé vlastnosti domény uvedené v okně Vlastnosti.To vám umožní zobrazit a upravit hodnoty vlastností domény i v případě, že jim není mapována na pole obrazce v diagramu.
Názvy, popisy a kategorie
Název a zobrazovaný název.Vaše definice vlastností domény je zobrazovaný název vlastnosti název se zobrazí v okně Vlastnosti běhu.Název se naopak používá při psaní kódu programu aktualizovat vlastnost.Název musí být správný název alfanumerické CLR, ale zobrazovaný název může obsahovat mezery.
Pokud nastavíte název vlastnosti v definici DSL, jeho zobrazovaný název automaticky nastaven název kopie.Pokud píšete Pascal cased název, například "FuelGauge", zobrazovaný název automaticky obsahují mezeru: "Měřidlo paliva".Však můžete nastavit název zobrazení explicitně na jinou hodnotu.
Popis.Popis vlastnosti domény, zobrazí se na dvou místech:
V dolní části okna Vlastnosti při klepnutí na příkaz Vlastnosti.Můžete ji vysvětlit uživatele představuje vlastnost.
V programu generovaný kód.Používáte-li extrahovat dokumentaci k rozhraní API dokumentaci zařízení, se zobrazí jako popis této vlastnosti v rozhraní API.
Kategorie.Kategorie je nadpis v okně Vlastnosti.
Vystavuje funkce stylu
Některé dynamické funkce grafické prvky lze znázornit nebo vystavena jako vlastnosti domény.Funkce, která je vystavena tímto způsobem lze aktualizován uživatelem a další snadno aktualizovat podle kódu programu.
Pravým tlačítkem myši na obrazec Třída v definici DSL, přejděte na Přidat vystavenia pak zvolte funkci.
U obrazců můžete vystavit FillColor, OutlineColor, TextColor, OutlineDashStyle, OutlineThickness a FillGradientMode vlastnosti.Spojnice může vystavit Barva,TextColor, DashStyle, a Tloušťka vlastnosti.V diagramech vystavit FillColor a TextColor vlastnosti.
Předávání: Zobrazení vlastností souvisejících prvků
Když uživatel vaše DSL vybere element v modelu, zobrazí se vlastnosti daného prvku v okně Vlastnosti.Však můžete zobrazit vlastnosti zadané související prvky.To je užitečné, pokud jste definovali skupinu prvků pracuje společně.Může například definovat hlavní prvek a volitelný prvek modulu plug-in.Pokud hlavní prvek je mapována na obrazec a ostatní není, je užitečné zobrazit jejich vlastnosti, jako kdyby byly na jeden prvek.
Tento efekt se nazývá Vlastnost předávání, a dojde v několika případech.V ostatních případech lze dosáhnout vlastnost předávání definováním popisovač typu domény.
Výchozí vlastnost předávání případů
Pokud uživatel vybere v aplikaci Explorer obrazce nebo konektor nebo prvek, následující vlastnosti se zobrazí v okně Vlastnosti:
Vlastnosti domény, které jsou definovány domény třídou prvku modelu, včetně těch, které jsou definovány v základních tříd.Výjimkou jsou vlastnosti domény, pro které jste nastavili Je procházet na False.
Názvy prvků, které jsou propojeny prostřednictvím vztahy, které mají velkému 0..1.To poskytuje pohodlný způsob prohlížení volitelně propojené prvky, i když není definována konektor mapování relace.
Vlastnosti domény vkládání vztah, který se zaměřuje na prvek.Protože vkládání vztahy obvykle nejsou explicitně zobrazeny, to umožňuje uživateli zobrazit jejich vlastnosti.
Vlastnosti domény, které jsou definovány na vybraný obrazec nebo konektor.
Přidání vlastností předávání
Chcete-li předat vlastnost definujete popisovač typu domény.Pokud máte doménu vztah mezi dvěma třídami domény, můžete nastavit vlastnost domény v první třídě na hodnotu vlastnosti domény v druhé doméně třídy popisovač typu domény.Například pokud máte vztah mezi třídou adresáře domény a domény třída Autor, můžete popisovač typu domény tak, aby název vlastnosti Autor knihy v okně Vlastnosti se zobrazí, když uživatel vybere knihu.
[!POZNÁMKA]
Vlastnost předávání ovlivní pouze okno Vlastnosti uživatel upravuje modelu.Nedefinuje vlastnost domain přijímací třídy.Pokud chcete získat přístup k vlastnosti předané domény v jiných částech definice DSL nebo programový kód, musí získat přístup k předávání prvek.
Následující postup předpokládá, že jste vytvořili DSL.První kroky několika shrnout požadavky.
Vlastnost dopředu od jiného prvku
Vytvoření Jazykové nástroje specifické pro doménu řešení, které obsahuje alespoň dvě třídy, které jsou v tomto příkladu se nazývají knihy a Autor.Měla by existovat vztah buď druhu mezi knihy a Autor.
Násobnost zdrojové role (role na straně knihy) by měla být 0..1 nebo 1..1, takže každá kniha má jednoho autora.
V DSL Explorer, pravým tlačítkem myši na třídu adresáře domény a klepněte na tlačítko Přidat nový DomainTypeDescriptor.
Uzel s názvem Cesty vlastní vlastnost popisovače se zobrazí pod Vlastní typ popisovače uzel.
Klepněte pravým tlačítkem myši Vlastní typ popisovače uzlu a pak klepněte na Přidat nový PropertyPath.
Ve skupinovém rámečku se zobrazí nová vlastnost Cesta Cesty vlastní vlastnost popisovače uzel.
Vyberte novou cestu pro vlastnost a Vlastnosti nastavit okno, cestu k vlastnosti cestu k prvku modelu vhodné.
Cesta ve stromovém zobrazení můžete upravit klepnutím na šipku vpravo od této vlastnosti.Další informace o cestách domény viz Syntaxe cesty domény.Když jste ji upravili, by měl vypadat cesta BookReferencesAuthor.Author/!Autor.
Nastavit Vlastnost se Name domény vlastnost Autor.
Nastavit Zobrazovaný název na jméno autora.
Všechny šablony transformace, sestavit a spustit modem DSL.
V diagramu modelu vytvořit knihu, Autor a propojit je pomocí vztahu odkaz.Vyberte prvek knihy a v okně Vlastnosti zobrazí jméno autora vedle vlastnosti knihy.Změnit název propojené Autor nebo odkaz na jiný autor knihy a pozorovat, že změní název autor knihy.
Vlastní vlastnost editory
Okno Vlastnosti poskytuje vhodné výchozí, úpravy prostředí pro typ vlastnosti každé domény.Výčtový typ, například uživateli se zobrazí rozevírací seznam a číselné vlastnosti lze zadat číslice.To platí pouze pro předdefinované typy.Externí typ zadáte, bude uživatel zobrazit hodnoty vlastnosti, ale nelze jej upravovat.
Můžete však zadat následující editory a typů:
Jiný editor je použit standardní typu.Je například zadat cestu editor souborů pro vlastnost řetězce.
Externí typ pro vlastnost domain a editor pro něj.
A.NET editoru, jako je například editor souborů cestu, nebo můžete vytvořit vlastní vlastnosti editoru.
Převod mezi externí typ a typu, jako je například řetězec, který má výchozí editor.
V DSL externí typ libovolný typ, který není jednoduché typy (například Boolean nebo Int32) nebo řetězec.
Definovat vlastnosti domény, který má externí typ
V Aplikaci Solution Explorer, přidat odkaz na sestavení (DLL), který obsahuje externí typ v Dsl projektu.
Shromáždění může být.NET sestavení nebo zadané sestavení.
Přidání typu do Typy domén seznam, pokud jste tak již neučinili.
Otevřete DslDefinition.dsl a v DSL Explorer, klepněte pravým tlačítkem myši na kořenový uzel a potom klepněte na tlačítko Přidat nový typ externí.
Ve skupinovém rámečku se zobrazí nová položka Typy domén uzel.
Upozornění Položka nabídky není na kořenový uzel DSL Typy domén uzel.
V okně Vlastnosti nastavte název a oboru názvů nového typu.
Přidáte vlastnost domény do domény třídy obvyklým způsobem.
V okně Vlastnosti vyberte z rozevíracího seznamu v externí typ typu pole.
V této fázi mohou uživatelé zobrazit hodnoty vlastnosti, ale nemohou jej upravit.Zobrazené hodnoty získané ToString() funkce.Můžete napsat kód programu, který nastaví hodnotu vlastnosti, například v příkazu nebo pravidlo.
Nastavení vlastností Editor
Přidejte atribut CLR vlastnost domain v následující formě:
[System.ComponentModel.Editor (
typeof(AnEditor),
typeof(System.Drawing.Design.UITypeEditor))]
Atribut lze nastavit u vlastnosti pomocí Vlastní atribut položku v okně Vlastnosti.
Typ AnEditor musí být odvozen od typu určeného v druhý parametr.Druhý parametr by měl být buď UITypeEditor nebo ComponentEditor.Další informace naleznete v tématu EditorAttribute.
Můžete zadat vlastní editor nebo editor v .NET Framework, jako například FileNameEditor nebo ImageEditor.Následující postup můžete například použijte pro vlastnost, ve kterém může uživatel zadat název souboru.
Definovat vlastnosti souboru název domény
Přidáte vlastnost domény do domény třídy v DSL Definition.
Vyberte novou vlastnost.V Vlastní atribut pole v okně Vlastnosti, zadejte následující atribut.Chcete-li tento atribut, klepněte na tlačítko se třemi tečkami [...] a potom zadejte název atributu a parametry odděleně:
[System.ComponentModel.Editor ( typeof(System.Windows.Forms.Design.FileNameEditor) , typeof(System.Drawing.Design.UITypeEditor))]
Typ vlastnosti domény ponechat výchozí nastavení z řetězec.
Testování editoru ověříte, že uživatelé mohou otevřít editor název souboru upravit vlastnost vaší domény.
Stiskněte kombinaci kláves CTRL + F5 nebo F5.Ladění řešení otevřete testovací soubor.Vytvořit prvek třídy domény a vyberte jej.
V okně Vlastnosti vyberte vlastnost domény.Hodnota pole se zobrazí tři tečky [...].
Klepněte na tlačítko se třemi tečkami.Zobrazí se dialogové okno.Vyberte soubor a zavřete dialogové okno.Cesta k souboru je nyní hodnotu vlastnosti domény.
Definování vlastní editor vlastností
Můžete definovat vlastní editor.Chcete to umožnit uživateli upravovat text, který jste definovali nebo upravit standardní typ zvláštním způsobem.Například by mohla umožnit uživateli vstupní řetězec, který představuje vzorec.
Definovat editor zápisu, který je odvozen od třídy UITypeEditor.Musí přepsat své třídy:
EditValue, interakci s uživatelem a aktualizovat hodnotu vlastnosti.
GetEditStyle, a určit, zda bude editor otevřete dialogové okno nebo poskytnout rozevírací nabídky.
Můžete zadat také grafické znázornění hodnotu vlastnosti zobrazené v mřížce vlastnost.To provedete přepsat GetPaintValueSupported, a PaintValue.Další informace naleznete v tématu UITypeEditor.
[!POZNÁMKA]
Přidáním kódu do souboru na samostatný kód v Dsl projektu.
Příklad:
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";
}
}
Chcete-li použít tento editor nastavte Vlastní atribut vlastnosti domény:
[System.ComponentModel.Editor (
typeof(MyNamespace.TextFileNameEditor)
, typeof(System.Drawing.Design.UITypeEditor))]
Další informace naleznete v tématu UITypeEditor.
Poskytující rozevírací seznam hodnot
Můžete zadat seznam hodnot, které uživatel vybírat.
[!POZNÁMKA]
Tento postup obsahuje seznam hodnot, které lze změnit za běhu.Pokud chcete poskytnout seznam, který se nemění, zvažte místo toho pomocí Výčtový typ jako typ vlastnosti vaší domény.
Chcete-li definovat seznam standardních hodnot, přidáte do vaší domény vlastnost CLR atribut, který má následující tvar:
[System.ComponentModel.TypeConverter
(typeof(MyTypeConverter))]
Definování třídy, který je odvozen od TypeConverter.Přidat kód v samostatném souboru v Dsl projektu.Příklad:
/// <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;
}
}