Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

The WinFormedge Project

This is a .NET library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

WinFormedge

GitHubNugetNugetBuild

点击[此处]切换到中文仓库页面。

✨ About

WinFormedge is an open-source .NET library built on Microsoft WebView2, enabling developers to create modern, visually appealing WinForms applications using HTML, CSS, and JavaScript. With WinFormedge, you can seamlessly integrate web technologies into your WinForm projects, allowing for rich and interactive user interfaces.

The inspiration behind WinFormedge comes from another project I maintain: NanUI. Like WinFormedge, NanUI lets developers build WinForms applications using web technologies. But unlike WinFormedge, it relies on the Chromium Embedded Framework (CEF).

PREVIEW

🖥️ Requirements

Development Environment:

  • Visual Studio 2022
  • .NET 8.0 or higher

Deployment Environment:

  • Windows 10 1903 or higher

This is a Windows ONLY library. It is not compatible with other operating systems.

The minimum supported operating system is Windows 10 version 1903 (May 2019 Update). And some fetures such as SystemBackdrop and SystemColorMode are only available on Windows 11.

🧩 Changelog

The changelog for the WinFormedge project is available in the CHANGELOG.md file. It contains a detailed list of changes, bug fixes, and new features added to the project. The changelog is updated regularly to reflect the latest changes in the project.

🔧 Installation

The WinFormedge library has now set up automated NuGet publishing on GitHub, so you can find the latest release of WinFormedge on NuGet. Simply search for and install the WinFormedge package using the NuGet Package Manager or any other NuGet management tool.

PM> Install-Package WinFormedge

🪄 Getting Started

First of all, you should create a WinForm Application by using default project template.

1. Replace initialization code by using WinFormedge application initialization procedure.

You should use FormedgeApp instead of Application class to initialize your WinForm application in the program.cs file. The FormedgeApp class is a builder for creating a WinFormedge application. It provides methods for configuring the application and running it.

usingWinFormedge;namespaceMinimalExampleApp;internalstaticclassProgram{[STAThread]staticvoidMain(){ApplicationConfiguration.Initialize();varapp=FormedgeApp.CreateBuilder().UseDevTools().UseWinFormedgeApp<MyFormedgeApp>().Build();app.Run();}}

When the FormedgeApp class is created, it will automatically initialize the WebView2 environment and run the message loop.

2. Create a AppStartup class.

The AppStartup class is the entry point of your WinFormedge application. It provides methods for configuring the application. You can override the OnApplicationLaunched method to perform any initialization tasks before the application starts.

And you must override the OnApplicationStartup method to create the main window of your application. If the OnApplicationStartup method returns values created by StartupSettings class, the FormedgeApp class will create the main window of your application. Otherwise if the OnApplicationStartup method returns null the application will be closed.

usingWinFormedge;namespaceMinimalExampleApp;internalclassMyFormedgeApp:AppStartup{protectedoverrideboolOnApplicationLaunched(string[]args){returntrue;}protectedoverrideAppCreationAction?OnApplicationStartup(StartupSettingsoptions){returnoptions.UseMainWindow(newMyWindow());}}

You can do some staffs like User Login, User Settings, etc. in the OnApplicationStartup method to determine using which window to start the application. Andalso you can end the application by returning null if conditions are not met.

3. Create a MainWindow class.

The MyWindow class is the main window of your application. It inherits from the Formedge class. You can use the Formedge class to create a window with a WebView2 control.

usingWinFormedge;usingMicrosoft.Web.WebView2.Core;namespaceMinimalExampleApp;internalclassMyWindow:Formedge{publicMyWindow(){win.MinimumSize=newSize(960,480);win.Size=newSize(1280,800);win.AllowFullScreen=true;Load+=MyWindow_Load;DOMContentLoaded+=MyWindow_DOMContentLoaded;Url="https://cn.bing.com";}privatevoidMyWindow_Load(object?sender,EventArgse){// Window and WebView2 are ready to use here.}privatevoidMyWindow_DOMContentLoaded(object?sender,CoreWebView2DOMContentLoadedEventArgse){// The DOM content is loaded and ready to use here.ExecuteScriptAsync(""""(()=>{const headerEl = document.querySelector("#hdr");headerEl.style.appRegion="drag";})(); """");}protectedoverrideWindowSettingsConfigureHostWindowSettings(HostWindowBuilderopts){// Configure the host window settings here.varwin=opts.UseDefaultWindow();win.ExtendsContentIntoTitleBar=true;win.SystemBackdropType=SystemBackdropType.MicaAlt;returnwin;}}

Codes above creates a Formedge window. By using Url property, you can set the initial URL of the window.

Default window properties can be set in the constructor. For special style properties of the window, you need to override the ConfigureHostWindowSettings method of the Formedge class and use its HostWindowBuilder parameter to determine which window style you will adopt, as well as configure the special styles that this window possesses. For example, in the sample code, by using the UseDefaultWindow method of the HostWindowBuilder parameter, you can instruct Formedge to create a default window and set its ExtendsContentIntoTitleBar property to achieve a borderless effect.

The Load event is raised when the window and WebView2 are ready to use. You can use this event to perform any initialization tasks that require the WebView2 control to be ready.

The DOMContentLoaded event is raised when the DOM content is loaded and ready to use. You can use this event to perform any tasks that require the DOM content to be loaded. As you can see in the example, you can use the ExecuteScriptAsync method to execute JavaScript code in the WebView2 control. The JavaScript code in the example sets the appRegion property of the header element to drag, which allows the user to drag the window by clicking and dragging the element on these rectangles.

4. Run the application.

You can run the application by pressing F5 in Visual Studio. The application will create a window with a WebView2 control that displays the Bing homepage.

PREVIEW

You can drag the window by clicking and dragging the header element of the page and resize the window by dragging the edges of the window.

📚 Documentation

The documentation for the WinFormedge project is not available yet. However, you can find the source code and examples in the src and examples folders. The source code is well-documented and provides examples of how to use the WinFormedge library right now.

🛠️ Contributing

Contributions are welcome! If you have any ideas, suggestions, or bug reports, please feel free to open an issue or submit a pull request.

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

🧭 Acknowledgements

About

An open source library based on Microsoft WebView2 that can buid powerful WinForm applications with HTML, CSS and JavaScript easily.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages