使用Xamarin构建托盘应用程序?

时间:2017-12-04 12:37:23

标签: xamarin cross-platform system-tray

使用.NET Core和Xamarin我考虑构建一个可以在Windows和macOS环境中运行的应用程序。

.NET Core部分将用于所有后端内容,并将其功能作为REST API提供。但是,.NET Core对构建本机UI应用程序(WPF,...)没有任何支持,因此构建托盘应用程序是不行的。

所以我考虑过使用Xamarin。但我似乎无法弄清楚这是否可能。我也无法找到如何开始的任何线索。

我还没有进一步研究过一些替代方案:

  • Mono,但是没有任何与VS2017的集成,所以这就是......
  • QT,但那是针对C ++的,所以也是如此
  • Java,但是为什么首先要使用.NET Core ...
  • Electron.js

1 个答案:

答案 0 :(得分:1)

对于Windows,Xamarin.Forms3.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();
}