使用.NET Core和Xamarin,我想构建一个可以在Windows和macOS环境中运行的应用程序。
.NET Core部分将用于所有后端内容,并作为REST API提供其功能。 但是,.NET Core 不支持构建本机 UI 应用程序(WPF,...),因此这是构建托盘应用程序的不行。
所以我考虑使用Xamarin来实现这一点。 但我似乎无法弄清楚这是否可能。 我也找不到任何关于如何开始的线索。
我还没有进一步调查的一些替代方案:
- 单声道,但这与VS2017没有任何集成,所以已经出来了......
- QT,但这针对的是C++,所以这也出来了
- Java,但是为什么首先要使用.NET Core呢?
- 电子.js
对于 Windows,Xamarin.Forms
在3.0
之前不会正式支持 WPF。
回复:https://blog.xamarin.com/glimpse-future-xamarin-forms-3-0/
就托盘应用而言,这是本机Windows代码,不会是Xamarin.Forms
UI代码的一部分,而是显示/隐藏应用的UI的本机Windows代码(假定基于Xamarin.Forms)
对于macOS,Xamarin.Forms
通过Xamarin.Mac
支持,目前处于"预览"版本中。
就macOS上的工具托盘应用程序而言,Xamarin.Mac
您可以在系统状态栏中创建一个项目(基于图标和/或文本)。
通常,这是在NSApplicationDelegate.DidFinishLaunching
中完成的,并且很容易:
statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(NSStatusItemLength.Variable);
statusItem.Button.Image = new NSImage("moviemadness_icon_dark.png")
{
Template = true
};
statusItem.Button.Action = new Selector("StatusItemButtonAction:");
在此示例中,每当点击状态中的图标/文本时,都会触发StatusItemButtonAction
方法,如果您同时按住控制键,它会自行终止,否则它会运行StatusBarPopOver
,在我的例子中,该构造一个NSPopover
并显示显示移动应用程序服务器状态的嵌入式Xamarin.Forms
TabbedPage
UI, 应用程序的当前用户,应用程序分析等...
[Action("StatusItemButtonAction:")]
public void StatusItemButtonAction(NSStatusBarButton sender)
{
var currentEvent = NSApplication.SharedApplication.CurrentEvent;
if (currentEvent.ModifierFlags.HasFlag(NSEventModifierMask.AlternateKeyMask) ||
currentEvent.ModifierFlags.HasFlag(NSEventModifierMask.ControlKeyMask))
NSApplication.SharedApplication.Terminate(this);
else
StatusBarPopOver();
}