记住 Xamarin Forms window 的位置 Mac OS

Remember window position with Xamarin Forms Mac OS

我了解到 XCode 支持自动保存以记住 window 位置。我看到它自由记录。

当平台是 macOS 时,Xamarin Forms 5 怎么样?

这是我的一些代码,如果有帮助的话:

public class AppDelegate : FormsApplicationDelegate
{
    NSWindow window;
    public AppDelegate()
    {
        var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;

        var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
        window = new NSWindow(rect, style, NSBackingStore.Buffered, false)
        {
            Title = "Elderly and Infirm Rota",
            TitleVisibility = NSWindowTitleVisibility.Visible
        };

        InstallApplicationFiles();
    }

更新

在评论中我还提到了限制 window 的大小。我现在已经解决了这一点 (NSWindow.MinSize):

NSWindow window;
public AppDelegate()
{
    var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;

    var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
    window = new NSWindow(rect, style, NSBackingStore.Buffered, false)
    {
        Title = "Elderly and Infirm Rota",
        TitleVisibility = NSWindowTitleVisibility.Visible,
        MinSize = rect.Size
    };

    InstallApplicationFiles();
}

现在我必须解决 window 大小/位置并记住它。

事实证明这并不难。 Mac 的 Visual Studio 缺少一些为 Xcode 描述的设置(我认为)。参见:frameAutoSaveName

提供的答案 here 也很有用。对我来说,部分问题是使用正确的术语来搜索答案,在这种情况下 NSWindow 很重要。

在我的 macOS AppDeletegate 构造函数中,我现在这样做:

public AppDelegate()
{
    var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;

    var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
    window = new NSWindow(rect, style, NSBackingStore.Buffered, false)
    {
        Title = NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleDisplayName").ToString(),
        TitleVisibility = NSWindowTitleVisibility.Visible,
        MinSize = rect.Size,
        FrameAutosaveName = "xxxxx"
    };

    InstallApplicationFiles();
}

注意 FrameAutosaveName 属性 的附加设置:

FrameAutosaveName = "xxxxx"

现在,当我关闭应用程序时,window 位置会被记住。


请让我知道是否可以直接在 Visual Studio 中为 Mac GUI 设置它。