Ignore .NET Framework. .NET Framework just means old.
.NET 6 is just the next version of .NET Core. It doesn't "replace" .NET Core since it is .NET Core. They just dropped the "Core" suffix since there's going to be one .NET going forward.
MAUI is basically the next iteration of Xamarin.Forms and you can migrate Xamarin.Forms apps to MAUI (https://docs.microsoft.com/en-us/dotnet/maui/get-started/migrate). While you might need to make some changes to upgrade from Xamarin.Forms to MAUI, it's likely to be less painful than many communities make upgrading to new versions.
Basically, you use .NET 6. Xamarin.Forms is the stable library that's available, but there is a preview of MAUI that you can use or you can upgrade a Xamarin.Forms app to MAUI later. Xamarin.Forms and MAUI are both just libraries and there are other libraries as well like Uno (https://platform.uno).
In other ecosystems, this exists too. With iOS, there's SwiftUI and InterfaceBuilder. For desktop development, there's Gtk+, Qt, Electron, etc.
.NET 6 is where all the current/future of .NET is.
MAUI is a cross-platform system for building UIs, but there are others in .NET or in other languages (like Dart/Flutter or Kotlin/Jetpack). MAUI is a re-branding of Xamarin.Forms as well as a major upgrade.
Uno Platform is a very similar framework, based on UWP however, not WPF, and targets android/ios too. They are going with the completly free route, and maybe enterprised paid support eventually. It is also open source.
Yep, as a developer, this is my biggest complaint about UWP
IMO the biggest mistake microsoft ever made was not expanding UWP to other platforms, and making it “write app for windows, run anywhere” - this is exactly why I think their store (and windows phone) never worked out, especially considering how web tech (“write app for web, run anywhere”) is what basically all apps nowadays use
There’s massive demand for cross-platform tech but microsoft seems to have little interest - .NET devs have been asking for quite a while
There is Uno Platform which tries to do this (make UWP apps run on other platforms) but microsoft hasn’t done much more than acknowledge their existence
They do have a port of the windows calculator app for other platforms, as a proof of concept. This is probably the best “user friendly” example that shows what you’re describing, you can see it here https://platform.uno/code-samples/
I'm guessing you mean cross-platform UI layer too? There's a few options. Xamarin.Forms is getting closer. There's https://platform.uno.
Personally I mainly build for macOS and love Xamarin.Mac- and from there you can share the logic with uwp/winUI.
Uno enables you to build native Android/iOS or WebAssembly apps using the UWP framework. Well, Xamarin also has a XAML-based UI framework (Xamarin.Forms) but that is another dialect of XAML. If you're already familiar with UWP, Uno can be a more natural choice. (As a matter of fact, if you target either of the native mobile platforms, Uno does rely on Xamarin. Xamarin makes available the platform functionality, over which Uno provides a UWP-compatible UI layer as shown in the diagram here.)
What I like the most about Uno is that it makes possible to develop my app as a regular Windows UWP app which can then run on the targeted platform with no or minimal modifications. The debug/test cycles are much faster this way as no emulator or real device is needed.
Uno platform on webassembly has AOT for over a year already and their learnings apply to blazor. Xamarin.ios and xamarin.android also have aot since forever (not in wasm but the bundle size effect still applies) The end goal with AOT is not to do a full AOT because that increases the package too much, you generate a profile that finds what what is needed to aot and what is not needed, so you get the best of both world. uno platform aot
If we look at xamarin for example, they call profile guided AOT ‘startup tracing’ and they get 50% startup time gain with only 10% increase in package size. Experience may vary depending on your code but still gives a good idea.
it is very much needed to make c# on webassembly viable.
Since you already referenced the Uno platform, then this post might be an interesting read: https://platform.uno/blog/profile-guided-aot-in-uno-platform-reduces-package-size-by-50/
The content in short:
Profile Guided AOT (utilizes mixed AOT/interpreter mode) for Uno Playground has a startup time of 1.19 seconds. The interpreter only version has a startup time of 2.1 seconds. Not sure how that is measured, but still an almost 2x improvement.
Yes, Uno Playground is not Blazor, but the potential increase in startup performance still exists.
I haven't tested the performance, but Xamarin Forms can run on UWP and Uno provides a UWP layer. So you'd stack XF on top of Uno if you wanted to start integrating. https://platform.uno/xamarin-forms/
Correct, running in a browser is one of the platform choice. The same code can compile to the other platforms I mentioned above :) Their website has more details. https://platform.uno/
The blog post of this thread does focus exclusively on webassembly.
In this blog post, I will show you how to create a very simple cross-platform Uno-App that uses the uplink.NET-Package to connect to the Storj network. It will work on the Universal Windows Platform (UWP), WinUI, Android, iOS, and macOS. For Windows applications, we will use UWP/WinUI and the Uno Platform will take that same codebase to Android, iOS and macOS. To build all targets you would need a Windows-PC and a Mac with Visual Studio installed.
>I am wondering if there are libraries for c# that are not WinForms/wpf?
Are you asking whether there are alternative UI frameworks? If so, yes. You can use Avalonia or Uno Platform, which are cross-platform UI frameworks.
>All that I really want to be able to do is describe the data my CharacterSheet should hold once, then tell WPF or what ever frame work I am trying to use how to display the data once, and then be able to re-use that
So you have a collection of objects that you need to display? In WPF you can display that data using an items control, like a ListBox
. You bind the items control's ItemsSource
property to the collection and you customize how the data is displayed by using a DataTemplate
. You can define the data template as a resource then use it to set the ItemTemplate
property of the items control.
>if I decide to change the name of some field in AttributeBlock
I have to mirror that in my custom component.
When you specify a binding you're telling the data binding engine specifically which property of an object a UI element's property should connect to. So if you change the name of the object's property the binding will not work unless you update the binding definition to reflect the change.
>I would also love some help figuring out how to take this simple class, and turning it into a reusable component that I can use all over the UI.
Your class is a model. Your "component" is the view. Once you familiarize yourself with the MVVM design pattern you'll be able to have a clear idea of how to implement your project appropriately.
For #2 - You can use either UWP or WinUI for Windows 10/11, and then you can use several options to 'back port' UWP/WINUI features you are using to Win 7 (PWA, Electron or Skia - https://platform.uno/windows7/) . This is because WinUI is not supported on Win7 and Uno Platform is the only way to 'back port' do it. You cannot use WPF with Uno Platform.
I certainly understand your concerns regarding MAUI and they aren't invalid. If you want to create cross-platform desktop apps before MAUI comes out, you can try the following Microsoft-supported solutions:
They are more like WPF than WinForms because they both use XAML as the design markup language.
Like I say with anything new that comes out -- temper your expectations. There's always a chance MAUI could flop.
The goal for MAUI, along with targeting Android and iOS, is to be able to target Windows desktop and macOS by utilizing WinUI 3 and MacCatalyst, respectively. There should be more detail in this post: https://docs.microsoft.com/en-us/dotnet/maui/what-is-maui
Unlike other solutions like Uno Platform that also target Linux (as a Skia backend) and browsers (using WebAssembly), you can utilize MAUI and Blazor to target browsers. Not sure if there is a solution in the works to target Linux at all for MAUI.
Microsoft is working on a couple projects, but they're generally quite bad at getting UI platforms besides WinForms done. A quite good community project to achieve cross platform UI support that released recently is Uno
Try Avalonia, it’s very much like WPF but has a lot of quality-of-life improvements that will help to reduce the boilerplate or achieve more while writing less code.
WinForms is okayish if the app is really simple, otherwise you’ll get burned by the lack of features and painful GUI-only layout management.
Also there’s https://platform.uno but I haven’t tried it personally.
That's what they claim on https://platform.uno/docs/articles/uwp-vs-winui3.html.
"WinUI 3 is the next generation of Microsoft's Windows UI library. Scheduled for release in 2021, it succeeds the UWP XAML framework as Microsoft's actively-developed native UI platform. WinUI 3 supports Windows Desktop apps through Project Reunion."
I’ve been working on some projects lately that involves GUI applications for a Raspberry pi, WASM, and UWP. I’ve chosen to follow the Uno-Platform as my main go to although I am still experimenting. I didn’t have the best results initially using Avolonia UI on the raspberry pi although I haven’t dove as deep into it as I had the Uno-Platform. Uno has a very large and active development community and their documentation is up to date with the newest Microsoft products. This includes the team actively working on .Net 5, .Net6, .Net Maui, and WinUI3. They provide many samples on GitHub as well as useful examples written by supporters on their “blog” section over at Uno Platform Website
If anyone have anything to contribute as to why Avolonia UI may be better I would love to hear it as I have not have time to deep-dive into both platforms.
I’ve also worked on Total-Cross and Flutter, but chose to skip over those due to my need to be fluent in C# for my company to maintain prior systems.
Makes sense for sure, just wanted to point it out as it does show what could be possible. It certainly just needs deeper exploration by the teams involved with MAUI and Visual Studio to make those types of changes happen, especially cross-platform.
That's where what Uno Platform is doing excites me in delivering the ability to take the same XAML and run it cross-platform and on the web.
> Question 1: So, first, do we have the option to have the view of the open windows of an app if we hover over it on the dock? (image)
You can just hover over an icon and lightly tap twice on the mouse/trackpad to see all the windows for that application.
> Question 2: How can I organize my apps on the screen automatically without ever needing to go full screen.
For this, I use a mixture of two apps: Rectangle and Contexts. Contexts gives you alt+tab a bit more like Windows. There is heaps of configuration available. I think it's worth the extra $$$ for this app.
> Question 6: Can I have maybe a folder on the dock where I can put my most important apps?
Yes. Make a folder in your Home directory called "Apps" (or whatever). Create shortcuts from your Applications folder into that directory. Go back to the home directory and drag the Apps folder into your dock. Right click the folder and choose "Grid". The only downside is that everything will be alphabetical.
> Question 7: Is there an alternative for Notepad++? Sublime, BBEdit, Visual Studio Code, Brackets, Atom are all fantastic. You can run Notepad++ with Wine (a tool that lets you run Windows apps on your mac) but the experience is not great.
> Question 9: Is the calculator app as powerful as it is on Windows Run the Windows calculator on Mac! either natively (https://platform.uno/blog/announcing-uno-platform-2-4-macos-support-and-windows-calculator-on-macos/) or using Wine.
Cross platform C#, Uno is getting a lot of support and some hype, I have not had time to evaluate it yet https://platform.uno/
I would recommend testing the file system access on all platforms as part of an first up POC
Accessing other software installed is a grey area, you should read and get advice on the license it is sold under. There may be an option to license the technology directly. If you want a license to sell your software under there are boilerplate templates, however I would strongly recommend consulting a lawyer
The page you provided - https://platform.uno/windows7/ states 3 options, not just Electron wrapper:
I like dart & Flutter but if you want to stay within the .NET ecosystem for a cross-plaform UI solution then https://platform.uno/ is the way to go. I think of it as .net's Flutter.
I haven't used this, however, another person asked this same question and after a few posts, a person suggested this https://platform.uno/ the person seeking answers checked it out and decided on using it. Perhaps it would fill your needs as well?
i) ~~Microsoft might have ported that calculator as proof-of-(cross-platform)-concept, and/or as as attempted proof of wider intent.~~ EDIT: Actually, it seems it was not Microsoft, but rather a company or project called 'Uno Platform' (website) . .
ii) The Linux calculator I use is not that hot.[1] Can you recommend anything?
[1] That calculator declares its name as 'Calculator', is installed by default on Cinnamon, and says (in its in-program credits) that it was created by one R. Burridge (inter alios). It works alright but I think the UI could be nicer.
I think Blazor will probably become the preferred technology for any new web development in C#, but only in the near term (< 5 years). I suspect in that time, Blazor will likely improve, but a new approach may also emerge.
You may want to also look into the Uno Platform to broaden your perspective: https://platform.uno/
AdaptiveTriggers are built-in the xaml, you can adapt anything based on the width or height. It's a little like media-queries in traditional web.
It's only one of the technique you can use but it's the one I prefer, it would apply well if you resize your browser window or iphone/ipad formats, evem split view in ipadOS. Height and width is universal. https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.adaptivetrigger?view=winrt-19041
You can try https://platform.uno/code-samples/ for example the 'uno calc' is very responsive on all platforms and form factors
UWP can technically work on tablets too with Uno. https://platform.uno/ But I haven't used it on tablets. Your other option is Xamarin Forms with runs on top of UWP or iOS or Android.
Apparently, it is already possible as an experimental feature according to the good people at Uno. That said, there is no official support of multi-thread in WASM yet, it is still a proposal that could be dropped later on.
https://platform.uno/blog/webassembly-threading-in-net/ https://github.com/unoplatform/Uno.Wasm.Bootstrap#threads-support
Not sure if that could work for Blazor.
Yes, you can consume UWP in a Xamarin app., but the foundation is Xamarin.
As a for-instance, look at the stack of the Uno project: https://platform.uno/how-it-works/
This is akin to what MAUI is doing except the UI layer is XAML instead of HTML.
Microsoft is taking Xamarin and putting Windows and Apple bindings below it. It will take time for MS to consolidate the .Net stacks together so UWP will be consumable by MAUI, probably sometime in the 2022 timeframe.
My point is, the .Net stack underlying MAUI is 'not' UWP.
Coming from Xamarin I have a very fond place for C# and .net core. .NET CORE is great! Xamarin, well I'm on Flutter now so that should say a lot. Xamarin was good, very clunky, but I'm hoping this will be different. I also gave Uno a shot at the same time I was trying out Flutter for my technology to use going forward. It's C#, and was not great. Infact, nothing worked, it took 30 minutes to build, hot reload didn't work so I had to rebuild everytime. After about 4 debug runs, which took very long to start up I was done and went back to Flutter.
To be honest, I think Flutter chose the right approach. I've used in cross platform "native" frameworks and they try to use their language to build using the existing UI elements for that native platform. That brings with it inherited problems from that platform UI. On xamarin the UI would always be slightly off because you're describing a UI which will be replaced by the native control on the device. Flutter renders everything. I saw this success when building games with cocos2dx as well. It's absolutely great knowing, no matter the platform, it'll look the same. Or not if you choose to use platform specific widgets.
If they're still taking the same approach of wrapping an old school UI Android API into a shiny language it'll bring with it all it's weird things like how long it takes to show a simple list, the same goes for iOS with it's data delegates and cell builders. That being said, I'm very excited to see more competition in the cross platform space. It'll only make the lives of developers better so the more he merrier. Lets see where they go with it, if it works, great! If it doesn't, great! Microsoft will most likely learn from it and then bring us something better.
>it doesn’t run on Android
You can actually run UWP apps on Android and iOS (Web is also included) through the UNO platform
>it has no real purpose other than to lock people into the Windows Store
UWP aren't locked to the MS Store. You can sideload them and install them just like any Win32 apps. Adobe used it to their advantage to install Adobe XD, a UWP app, through their Adobe launcher
>PWAs run everywhere and can be anything.
PWA is still heavily limited compared to modern native solutions
Uno Calculator is free and has standard, scientific, and programming modes.
If you're interested then they've written up how they ported the Win 10 code to native iOS, Android and WebAssembly here
Edit: sorry, just reread your request - uno doesn't do graphing.
Dado o que está dizendo eu iria de React Native, mas depende dos detalhes que deseja e a experiência especpifica, e até o objetivo geral. Particularmente prefiro algo nativo mesmo, e se possível até pensaria fazer um para cada paltaforma. Claro estou falando dentro de um contexto especíico. Para aplicativo que será usado bem pouco não compensa, em muitos casos não compensa investir demai sno iOS que tem bem pouco público no Brasil, mas um público que tende gastar mais (isso está mudando, porque muita gente que tem iOS hoje é que ganhou ou comprou um modelo antigo e essa pessoa não gasta). Então se não der para ir de Kotlin e Swift para cada um poderia ir de Xamarin para ambos. Ou poderia ver o Uno (https://platform.uno/).
Não posso falar muito sobre o Flutter, parece uma boa iniciativa e um caminho interessante.