使用.NET Core和Xamarin我考虑构建一个可以在Windows和macOS环境中运行的应用程序。
.NET Core部分将用于所有后端内容,并将其功能作为REST API提供。但是,.NET Core对构建本机UI应用程序(WPF,...)没有任何支持,因此构建托盘应用程序是不行的。
所以我考虑过使用Xamarin。但我似乎无法弄清楚这是否可能。我也无法找到如何开始的任何线索。
我还没有进一步研究过一些替代方案:
答案 0 :(得分:1)
对于Windows,Xamarin.Forms
在3.0
之前不会正式支持WPF。
re: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
用户界面,其中显示了移动应用服务器状态,应用的当前用户,应用分析等......
[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();
}