Ändringar i designern sedan .NET Framework (Windows Forms .NET)
Visual Designer för .NET:s Windows Forms har genomgått vissa förbättringar och förändringar sedan .NET Framework. Dessa ändringar påverkar till stor del anpassade kontrollutformare. I den här artikeln beskrivs de viktigaste skillnaderna från .NET Framework.
Visual Studio är ett .NET Framework-baserat program, och som sådan baseras visualdesignern som du ser för Windows Forms också på .NET Framework. Med ett .NET Framework-projekt körs både Visual Studio-miljön och Windows Forms-appen i samma process: devenv.exe. Detta innebär ett problem när du arbetar med en Windows Forms .NET-app (inte .NET Framework). Både .NET- och .NET Framework-kod kan inte fungera inom samma process. Därför använder Windows Forms .NET en annan designer, "out-of-process"-designern.
Utanför-process-designer
Out-of-process-designern är en process som kallas DesignToolsServer.exeoch körs parallellt med Visual Studio devenv.exe-processen. Den DesignToolsServer.exe-processen körs på samma version och plattform av .NET som din app har konfigurerats att rikta sig mot, till exempel .NET 9 och x64.
I Visual Studio-designern skapas .NET Framework-proxyobjekt för varje komponent och kontroll i designern, som kommunicerar med de verkliga .NET-objekten från ditt projekt i DesignToolsServer.exe designern.
Kontrolldesigners
För .NET måste designers för kontroller kodas med Microsoft.WinForms.Designer.SDK
-API:et, vilket är tillgängligt på NuGet-. Det här biblioteket är en omstrukturering av .NET Framework-designers för användning i .NET. Alla designertyper har flyttats till olika namnområden, men typnamnen är mestadels desamma. Om du vill uppdatera .NET Framework-designers för .NET måste du justera namnrymderna lite.
- Designerklasser och andra relaterade typer, till exempel
ControlDesigner
ochComponentTray
, har flyttats från namnområdetSystem.Windows.Forms.Design
tillMicrosoft.DotNet.DesignTools.Designers
namnrymd. - Åtgärdslistrelaterade typer i
System.ComponentModel.Design
namnområdet har flyttats tillMicrosoft.DotNet.DesignTools.Designers.Actions
namnområde. - Beteenderelaterade typer, till exempel utsmyckningar och snaplines, i
System.Windows.Forms.Design.Behavior
namnrymd har flyttats tillMicrosoft.DotNet.DesignTools.Designers.Behaviors
namnrymd.
Redigerare av anpassad typ
Redigerare för anpassade typer är mer komplicerade än kontrolldesigner. Eftersom Visual Studio-processen är .NET Framework-baserad måste alla användargränssnitt som visas i Visual Studio också vara .NET Framework-baserade. Den här designen utgör till exempel ett problem när du skapar en .NET-kontroll som visar en redigerare av anpassad typ som anropas genom att klicka på knappen …
i egenskapsrutnätet. Dialogrutan kan inte visas i kontexten för Visual Studio.
Designern utanför processen hanterar de flesta funktionerna för kontroldesign, såsom utsmyckningar, inbyggda typredigerare och anpassad målning. Varje gång du behöver visa en anpassad modal dialogruta, till exempel om du vill visa en ny typredigerare, måste du replikera den proxy-objektklientserverkommunikation som out-of-process-designern tillhandahåller. Detta skapar mycket mer omkostnader än det gamla .NET Framework-systemet.
Om dina anpassade kontrollegenskaper använder typredigerare som tillhandahålls av Windows Forms kan du använda EditorAttribute för att markera dina egenskaper med motsvarande .NET Framework-redigerare som du vill att Visual Studio ska använda. Genom att använda de inbyggda redigerarna undviker du kravet på att replikera proxyobjektets klient-server-kommunikation som tillhandahålls av den färdiga designern.
[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
Skapa en typredigerare
Om du vill skapa anpassade designers som tillhandahåller typredigerare behöver du en mängd olika projekt, enligt beskrivningen i följande lista:
-
Control
: Det här projektet är ditt anpassade kontrollbibliotek som innehåller koden för dina kontroller. Det här är biblioteket som en användare refererar till när de vill använda dina kontroller. -
Control.Client
: Ett Windows Forms for .NET Framework-projekt som innehåller dina anpassade dialogrutor för designergränssnittet. -
Control.Server
: Ett Windows Forms för .NET-projekt som innehåller den anpassade designerkoden för dina kontroller. -
Control.Protocol
: Ett .NET Standard-projekt som innehåller kommunikationsklasserna som används både avControl.Client
- ochControl.Server
-projekten. -
Control.Package
: Ett NuGet-paketprojekt som innehåller alla andra projekt. Det här paketet är formaterat på ett sätt som gör att Visual Studio Windows Forms för .NET-verktygen kan hantera och använda ditt kontrollbibliotek och dina formgivare.
Även om din typredigerare härleds från en befintlig redigerare, till exempel ColorEditor eller FileNameEditor, måste du fortfarande skapa den proxy-objektklientserverkommunikationen eftersom du har angett en ny UI-klasstyp som du vill visa i kontexten för Visual Studio. Men koden för att implementera den typen av redigerare i Visual Studio är mycket enklare.
Viktig
Dokumentation som beskriver det här scenariot i detalj pågår. Tills dokumentationen har publicerats använder du följande blogginlägg och exempel för att hjälpa dig att skapa, publicera och använda den här projektstrukturen:
.NET Desktop feedback