Návrhář se změní od rozhraní .NET Framework (model Windows Forms .NET).
Vizuální návrhář pro model Windows Forms pro .NET má některá vylepšení a změny od rozhraní .NET Framework. Tyto změny do značné míry ovlivňují vlastní návrháře ovládacích prvků. Tento článek popisuje klíčové rozdíly od rozhraní .NET Framework.
Visual Studio je aplikace založená na rozhraní .NET Framework, a proto je vizuální návrhář, který vidíte pro model Windows Forms, také založený na rozhraní .NET Framework. S projektem rozhraní .NET Framework běží prostředí sady Visual Studio i aplikace model Windows Forms navržené v rámci stejného procesu: devenv.exe. To představuje problém při práci s aplikací model Windows Forms .NET (nikoli .NET Framework). Kód rozhraní .NET i .NET Framework nemůžou ve stejném procesu fungovat. V důsledku toho model Windows Forms .NET používá jiný návrhář, návrhář "mimo proces".
Návrhář mimo proces
Návrhář mimo proces je proces, který se nazývá DesignToolsServer.exe, a spouští se souběžně s procesem devenv.exe sady Visual Studio. Proces DesignToolsServer.exe běží na stejné verzi a platformě .NET, na kterou je vaše aplikace nastavená, například .NET 9 a x64.
V návrháři sady Visual Studio jsou objekty proxy rozhraní .NET Framework vytvořeny pro každou komponentu a ovládací prvek v návrháři, které komunikují se skutečnými objekty .NET z vašeho projektu v návrháři DesignToolsServer.exe .
Návrháři ovládacích prvků
Pro .NET musí být návrháři ovládacích prvků kódované pomocí Microsoft.WinForms.Designer.SDK
rozhraní API, které jsou k dispozici na NuGetu. Tato knihovna je refaktoringem návrhářů rozhraní .NET Framework pro .NET. Všechny typy návrháře se přesunuly do různých oborů názvů, ale názvy typů jsou většinou stejné. Pokud chcete aktualizovat návrháře rozhraní .NET Framework pro .NET, musíte obory názvů trochu upravit.
- Třídy návrháře a další související typy, například
ControlDesigner
aComponentTray
, se přesunuly zSystem.Windows.Forms.Design
oboru názvů doMicrosoft.DotNet.DesignTools.Designers
oboru názvů. - Typy související se seznamem
System.ComponentModel.Design
akcí v oboru názvů se přesunuly doMicrosoft.DotNet.DesignTools.Designers.Actions
oboru názvů. - Typy související s chováním, jako jsou doplňky a moduly snapline, se v
System.Windows.Forms.Design.Behavior
oboru názvů přesunuly doMicrosoft.DotNet.DesignTools.Designers.Behaviors
oboru názvů.
Vlastní editory typů
Vlastní editory typů jsou složitější než návrháři ovládacích prvků. Vzhledem k tomu, že proces sady Visual Studio je založený na rozhraní .NET Framework, musí být také jakékoli uživatelské rozhraní zobrazené v kontextu sady Visual Studio založené na rozhraní .NET Framework. Tento návrh představuje problém, například při vytváření ovládacího prvku .NET, který zobrazuje vlastní editor typů vyvolaný kliknutím na mřížku …
button vlastností. Dialogové okno nelze zobrazit v kontextu sady Visual Studio.
Návrhář mimo proces zpracovává většinu funkcí návrháře ovládacích prvků, jako jsou doplňky, předdefinované editory typů a vlastní malování. Kdykoli potřebujete zobrazit vlastní modální dialogové okno, například zobrazení nového editoru typů, musíte replikovat komunikaci mezi klientem a serverem proxy objektu, kterou poskytuje návrhář mimo proces. Tím se vytvoří mnohem větší režie než starý systém .NET Framework.
Pokud vlastní vlastnosti ovládacího prvku používají editory typů poskytované model Windows Forms, můžete vlastnosti EditorAttribute označit odpovídajícím editorem rozhraní .NET Framework, který má sada Visual Studio používat. Použitím integrovaných editorů se vyhnete požadavkům replikace komunikace mezi klientem a serverem proxy objektu poskytovanou návrhářem mimo proces.
[Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string? Filename { get; set; }
<Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Filename As String
Vytvoření editoru typů
Pokud chcete vytvořit vlastní návrháře, kteří poskytují editory typů, budete potřebovat celou řadu projektů, jak je popsáno v následujícím seznamu:
-
Control
: Tento projekt je vaše vlastní knihovna ovládacích prvků, která obsahuje kód pro ovládací prvky. Jedná se o knihovnu, na kterou by uživatel odkazoval, když chce používat vaše ovládací prvky. -
Control.Client
: Model Windows Forms pro projekt rozhraní .NET Framework, který obsahuje vaše vlastní dialogová okna uživatelského rozhraní návrháře. -
Control.Server
: Model Windows Forms pro projekt .NET, který obsahuje kód vlastního návrháře pro vaše ovládací prvky. -
Control.Protocol
: Projekt .NET Standard, který obsahuje třídy komunikace používané projektyControl.Client
iControl.Server
projekty. -
Control.Package
: Projekt balíčku NuGet, který obsahuje všechny ostatní projekty. Tento balíček je formátován způsobem, který umožňuje sadě Visual Studio model Windows Forms pro hostitele nástrojů .NET a používat knihovnu a návrháře ovládacích prvků.
I když váš editor typů pochází z existujícího editoru, například nebo ColorEditor, stále musíte vytvořit komunikaci s klientem a serverem proxy objektu, protože FileNameEditor jste zadali nový typ třídy uživatelského rozhraní, který chcete zobrazit v kontextu sady Visual Studio. Kód pro implementaci editoru typů do sady Visual Studio je ale mnohem jednodušší.
Důležité
Probíhá dokumentace, která popisuje tento scénář podrobně. Dokud nebude tato dokumentace publikovaná, použijte následující blogový příspěvek a ukázku, který vás provede vytvořením, publikováním a použitím této struktury projektu:
.NET Desktop feedback