- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 MonoMac 开发一个应用程序,到目前为止,我很高兴它在 Windows 世界中的易用性。然而,我对什么应该是一个容易实现的功能感到困惑:在选项卡标题中放置一个关闭按钮。
这已经在这里问过: Add a close button to NSTabviewitem
解决方案之一是在此处使用 Chrome 标签: https://github.com/rsms/chromium-tabs
是否可以在 MonoDevelop 的 MonoMac 项目中使用类似的东西?我可以将库作为链接库添加到 xcode 中,但 MonoDevelop 似乎无法保留这些更改。
因为(根据我的理解)MonoDevelop 基本上生成一个动态 xCode 项目并在编辑后丢弃它,我不确定这是否可能,希望有人能为我阐明它。
我不赞同 chromium 标签的想法 - 愿意接受任何建议。
最佳答案
您不能简单地将框架添加到 XCode 项目,这是正确的,因为它是由 MonoDevelop 生成的——从这个意义上说,它不是一个“真正的”项目。
你有几个选择:
1 - 用 C# 编写你自己的实现
2 - 选择一个开源实现(例如 Chromium Tabs)并将其移植到 C#。这应该可行,但显然会很耗时。此外,您可能会发现您需要访问 MonoMac 中尚不存在的一些 Cocoa API - 您需要找出解决方法或实现它们。
3 - 可以将 native 框架绑定(bind)到您的应用程序中。也许您可以找到已经为您感兴趣的框架完成此工作的人;或者你可以自己做。
我自己已经为 #3 苦苦挣扎了一两天,但终于弄明白了,所以我会与您分享这个过程,也许这会有所帮助。
我下载了 chromium 标签源并编译了框架。您只需要将其编译为 i386;因为 MonoMac 当前仅提供 32 位运行时
我将 ChromiumTabs.framework 添加到我的项目中,并设置了一个预构建脚本以将其复制到 ${TargetDir}/${ProjectName}.app/Contents/Frameworks/
在调用 NSApplication.Init() 之前,我在 Main 中手动加载框架:
var baseAppPath = Directory.GetParent(Directory.GetParent(System.AppDomain.CurrentDomain.BaseDirectory).ToString());
var chromiumPath = baseAppPath + "/Frameworks/ChromiumTabs.framework/ChromiumTabs";
var hresult = Dlfcn.dlopen(chromiumPath, 0); // Non-zero result indicates success
接下来,使用 parse.exe(当您从源代码编译时在 MonoMac 中可用)并将框架中的 .h 文件提供给它。使用生成的输出来创建将定义您的绑定(bind)的接口(interface)(关于绑定(bind)类型有很好的文档 here )。例如:
using System;
using System.Drawing;
using MonoMac.Foundation;
using MonoMac.AppKit;
namespace ChromiumTabs
{
[BaseType (typeof (NSWindowController))]
interface CTTabWindowController {
}
[BaseType (typeof (CTTabWindowController))]
interface CTBrowserWindowController {
[Export ("browser")]
CTBrowser Browser { get; }
[Export ("initWithBrowser:")]
IntPtr Constructor (CTBrowser browser);
}
[BaseType (typeof (NSObject))]
interface CTBrowser {
[Export ("addBlankTabInForeground:")]
CTTabContents AddBlankTabInForeground (bool foreground);
[Export ("createBlankTabBasedOn:")]
CTTabContents CreateBlankTabBasedOn (CTTabContents baseContents);
}
[BaseType (typeof (NSDocument))]
interface CTTabContents {
[Export ("initWithBaseTabContents:")]
IntPtr Constructor ([NullAllowed]CTTabContents baseContents);
[Export ("viewFrameDidChange:")]
void ViewFrameDidChange (RectangleF newFrame);
}
}
现在,将该 .cs 文件提供给 bmac.exe(查看帮助以了解您需要提供的参数)。这将输出一个托管 DLL,您可以在项目中引用它。
您现在应该可以使用您的新绑定(bind)了!
我对库做了一个非常小的绑定(bind),足以启动和运行它。你可以下载here .
关于c# - MonoMac 项目中的自定义选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15046157/
如果我使用“仅链接 SDK”构建我的应用程序以发布版本(用于在没有 Mono 的机器上进行 beta 测试),它不再启动——它似乎立即崩溃。 这是我运行我的应用程序命令行时的崩溃: [ERROR] F
我正在 MonoMac 中编写一个应用程序,如果我使用此调用打开辅助对话框,它会遇到问题 var prefForm = new PrefFormController(); prefForm.Windo
MonoMac 的页面似乎被放弃了。它似乎是几年前的最后一次更新,因为它说“Mountain Lion”是"new"操作系统。 New Lion and Mountain Lion APIs for
我刚开始在 Xamarin Studio 中使用 MonoMac,我遇到了最奇怪的问题: 我有一个带有 NSButton 和 NSTextField 的窗口。至此,我已经删除了按钮上的事件处理程序,所
我正在使用 MonoMac 开发一个应用程序,到目前为止,我很高兴它在 Windows 世界中的易用性。然而,我对什么应该是一个容易实现的功能感到困惑:在选项卡标题中放置一个关闭按钮。 这已经在这里问
是否在 MonoMac 中实现了 Game Center API? 如果没有,是否有为它们创建 C# 绑定(bind)的推荐路径? 最佳答案 开源 MonoMac 不包含 GameKit 绑定(bin
我正在尝试使用 Environment.Exit(0) 关闭 MonoMac 应用程序。但是,由于某种原因,此调用不会返回。它也不会抛出异常。当我在 MonoDevelop 的即时窗口中执行函数时,它
我是一名 .NET 开发人员,正在尝试使用 Windows 应用程序的 OSX 端口。我正在使用 MonoDevelop 和 MonoMac(带有 XCode Interface Builder)来创
我是一名 C# 开发人员,我想为 MacOS 移植我的应用程序。我安装了所有需要的 monomac,但我找不到它的教程和示例。有人可以分享链接吗? 最佳答案 您可以在 MonoMac github 存
这是我收到的错误: MonoMac.AppKit.AppKitThreadAccessException:AppKit 一致性错误:您正在调用只能从 UI 线程调用的方法。 我想将我的程序布局如下 i
我可以使用 - (BOOL)applicationShouldTerminateAfterLastWindowClosed: 使用应用程序委托(delegate)中的方法在窗口关闭时退出 cocoa
我想在 MonoMac 的 View 上画一些圆圈,但我完全不知道从哪里开始。在 Windows 上的 .NET 下,我会做类似的事情 Canvas canv = new Canvas(); Ell
我正在使用 MonoMac 开发一个应用程序,它使用 Sqlite 数据库作为数据存储。我正在使用 Mono.Data.Sqlite 命名空间中的类来访问数据库。在 OS X 10.7.4 上,Sql
我是 mono 和 monomac 的新手,我遇到了一些我希望应该很容易修复的问题。 在我的应用程序中,我想在运行时更改一些图像,所以我在项目的根目录中创建了一个“图像”文件夹,其中包含我的照片。但是
好的,所以我正在尝试在 mono mac 应用程序中使用 CoreLocation。在尝试了几次但没有成功(.UpdatedLocation 事件从未引发)之后,我从 MonoMac reposito
我有一个 Silverlight 应用程序,我使用 MonoMac 为 Mac 编写了一个启动器(基本上是一个嵌入式 Web 浏览器控件,可以加载包含 SL xap 的页面)。但是,我一直收到无法调试
我们在 MonoMac 上使用 AVAudioPlayer 时遇到问题。 我们在控制台上收到此警告: Class AVAudioPlayer is implemented in both ?? and
我正在尝试使用 MonoDevelop 3.0.3.2 创建 MonoMac 应用程序。我创建了一个新的 MonoMac 解决方案并尝试运行创建该解决方案后创建的模板,但这是我的构建输出: Build
我有一个 MonoMac 应用程序,想看看是哪一行导致了异常。我所有的堆栈跟踪都是这样的: [ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.T
我正在尝试使用 MonoMac 创建一个简单的应用程序,并且需要执行苹果脚本来访问来自不同媒体播放器的播放列表信息(参见我的 previous question)。 我决定尝试一下 MonoMac,因
我是一名优秀的程序员,十分优秀!