使用 Xamarin 构建托盘应用程序?
Building a Tray Application using Xamarin?
我考虑使用 .NET Core 和 Xamarin 构建一个可以在 Windows 和 macOS 环境中 运行 的应用程序。
.NET Core 部分将用于所有后端内容,并将其功能作为 REST API 提供。但是,.NET Core 不支持构建本机 UI 应用程序(WPF,...),因此无法构建托盘应用程序。
所以我考虑为此使用 Xamarin。但我似乎无法弄清楚这是否可能。我也找不到任何关于如何开始的线索。
一些我尚未进一步研究的替代方案:
- Mono,但它与 VS2017 没有任何集成,所以那是...
- QT,但它是针对 C++ 的,因此也已发布
- Java,但为什么首先要费心使用 .NET Core...
- Electron.js
对于Windows,Xamarin.Forms
将在3.0
之前正式支持WPF。
回复:https://blog.xamarin.com/glimpse-future-xamarin-forms-3-0/
就托盘应用程序而言,它是本机 Windows 代码,不会成为 Xamarin.Forms
UI 代码的一部分,但本机 Windows 代码会 show/hide 您的应用程序 UI(假设是 Xamarin.Forms)
对于 macOS,Xamarin.Forms
通过 Xamarin.Mac
得到支持,目前在 "preview" 版本中。
就相当于 macOS 上的工具栏应用程序而言,在 Xamarin.Mac
中,您可以在系统状态栏中创建一个项目(基于图标 and/or 文本)。
通常这是在 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:");
在此示例中,只要点击状态中的 icon/text,就会触发 StatusItemButtonAction
方法,如果您同时按住 control 键,它会自行终止,否则它会运行 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();
}
我考虑使用 .NET Core 和 Xamarin 构建一个可以在 Windows 和 macOS 环境中 运行 的应用程序。
.NET Core 部分将用于所有后端内容,并将其功能作为 REST API 提供。但是,.NET Core 不支持构建本机 UI 应用程序(WPF,...),因此无法构建托盘应用程序。
所以我考虑为此使用 Xamarin。但我似乎无法弄清楚这是否可能。我也找不到任何关于如何开始的线索。
一些我尚未进一步研究的替代方案:
- Mono,但它与 VS2017 没有任何集成,所以那是...
- QT,但它是针对 C++ 的,因此也已发布
- Java,但为什么首先要费心使用 .NET Core...
- Electron.js
对于Windows,Xamarin.Forms
将在3.0
之前正式支持WPF。
回复:https://blog.xamarin.com/glimpse-future-xamarin-forms-3-0/
就托盘应用程序而言,它是本机 Windows 代码,不会成为 Xamarin.Forms
UI 代码的一部分,但本机 Windows 代码会 show/hide 您的应用程序 UI(假设是 Xamarin.Forms)
对于 macOS,Xamarin.Forms
通过 Xamarin.Mac
得到支持,目前在 "preview" 版本中。
就相当于 macOS 上的工具栏应用程序而言,在 Xamarin.Mac
中,您可以在系统状态栏中创建一个项目(基于图标 and/or 文本)。
通常这是在 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:");
在此示例中,只要点击状态中的 icon/text,就会触发 StatusItemButtonAction
方法,如果您同时按住 control 键,它会自行终止,否则它会运行 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();
}