首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin.Forms靶向macOS

Xamarin.Forms靶向macOS
EN

Stack Overflow用户
提问于 2018-09-20 00:30:48
回答 2查看 4.3K关注 0票数 4

我正在使用VisualStudioforMac7.6.6创建一个针对Xamarin.Forms的macOS应用程序(与运行在Windows上的东西共享)。我创建一个新项目并选择

  1. 多平台应用程序空白窗体应用程序。单击“下一步”
  2. 配置您的空白窗体应用程序。目标平台有: Android和iOS。(macOS什么都没有)。因为我没有为iOS和安卓安装构建工具包,所以这两个复选框都被禁用了。因此,此向导页上的“下一步”按钮被禁用。

我该怎么做?我假设没有办法使用向导来实现这一点。

我遇到了一个旧员额,它从Xamarin Cocoa应用程序开始,并使用NuGet将Xamarin窗体功能放入其中,但不理解代码。

代码语言:javascript
复制
LoadApplication(new App());  // <-- don't know what App is

我怀疑VS和Xamarin.Forms是不同步的,处于流血边缘。有人成功了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-20 11:03:45

我建议遵循SushiHangover的建议,因为这更简单,这就是您已经做过的:

  1. 向解决方案中添加一个新的CocoaApp项目。
  2. 将Xamarin.Forms NuGet包安装到CocoaApp中。
  3. 从.NET项目中引用共享项目或CocoaApp标准项目。
  4. 编辑info.plist并删除源条目(NSMainStoryboardFile)。
  5. 更改从Xamarin.Forms.Platform.MacOS.FormsApplicationDelegate.派生的AppDelegate
  6. 更新Main.cs以初始化AppDelegate
  7. 在AppDelegate的DidFinishLaunching中,添加初始化Xamarin.Forms的代码。
  8. 创建一个新的NSWindow,它应该从AppDelegate中的MainWindow属性返回。

Main.cs:

代码语言:javascript
复制
static class MainClass
{
    static void Main(string[] args)
    {
        NSApplication.Init();
        NSApplication.SharedApplication.Delegate = new AppDelegate();
        NSApplication.Main(args);
    }
}

AppDelegate.cs:

代码语言:javascript
复制
[Register("AppDelegate")]
public class AppDelegate : Xamarin.Forms.Platform.MacOS.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);
        window.Title = "Xamarin.Forms on Mac!";
        window.TitleVisibility = NSWindowTitleVisibility.Hidden;
    }

    public override NSWindow MainWindow
    {
        get { return window; }
    }


    public override void DidFinishLaunching(NSNotification notification)
    {
        Xamarin.Forms.Forms.Init();
        LoadApplication(new App());

        base.DidFinishLaunching(notification);
    }

    public override void WillTerminate(NSNotification notification)
    {
        // Insert code here to tear down your application
    }
}

但是,Visual确实包含带有Xamarin.Forms项目模板的Mac项目。但是,它目前并没有在not对话框中公开这一点。您可以从这个模板创建一个Mac项目,但是它比SushiHangover建议的和您已经使用的要多一些。

  1. 将Xamarin.Forms项目模板安装到.NET核心项目模板中 dotnet new --install "/Applications/Visual Studio.app/Contents/Resources/lib/monodevelop/AddIns/Xamarin.Forms.Addin/Templates/Xamarin.Templates.Multiplatform.0.0.1.nupkg"
  2. 创建一个新的表单项目,包括Mac项目(您可能需要查看并设置其他模板参数--以下内容创建了一个使用Android、iOS、Mac、UWP和共享项目的空白表单应用程序)。 dotnet new forms-app --CreateMacProject -k blank
  3. 在您刚刚创建的项目的父目录中创建一个新的空白解决方案(其他-杂项-空白解决方案)。
  4. 将所有创建的项目添加到解决方案中。

然后,您可以构建并运行包含Xamarin.Forms的Mac项目。

注意,您可能希望从Xamarin.Forms核心项目模板中删除.NET项目模板,您可以通过运行以下操作来实现这一点:

代码语言:javascript
复制
dotnet new --debug:reinit
票数 7
EN

Stack Overflow用户

发布于 2019-08-02 17:03:26

除了批准的答案,这是不完整的,最近的更新,现在你必须再做一步。链接Mac项目主类中的delagate

main.cs:

代码语言:javascript
复制
static class MainClass
{
   static void Main(string[] args)
   {
       NSApplication.Init();
       NSApplication.SharedApplication.Delegate = new AppDelegate();
       NSApplication.Main(args);
    }
}

诺塔。我的编辑被拒绝了,我不允许添加评论。所以我增加了一个补充的答案来帮助那些现在寻求帮助的人。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52415863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档