我正在将GTK#应用程序集成到Mac OS X.Mac OS X上的GTK是一些Cocoa和Carbon基础的包装器.我们直接使用Carbon全局菜单API有一些特定于平台的东西(它比Cocoa更低级和更灵活,我们不需要是64位).
在Carbon将它们作为命令发送之前,似乎GTK吞噬了所有键盘事件.这是有道理的,因为没有Carbon命令到GTK世界的映射.一般来说,这不是问题,因为我们有一个全局键事件处理程序,并通过我们自己的命令系统调度所有内容.但是,这似乎阻止了Cmd-?从打开帮助搜索菜单,我找不到以编程方式执行此操作的方法.
菜单管理器的MenuSelect功能很有前途,但我还没有找到一种自动确定坐标的方法,由于某些原因它只在我两次击中组合时才有效...
或者,一种方式来发送Cmd-?对Carbon的命令处理进行击键或直接合成命令事件会很好,但我在那方面没有运气.
没有命令ID,Carbon的ProcessHICommand没有任何用处,我无法弄清楚它是什么(如果有的话)
关于Cocoa,我可以抓住NSWindow并调用InterpretKeyEvents,但是我没有任何运气成功合成NSEvent - 它只是发出哔哔声.我正在使用的事件是
var evt = NSEvent.KeyEvent (NSEventType.KeyDown, System.Drawing.PointF.Empty,
NSEventModifierMask.CommandKeyMask | NSEventModifierMask.ShiftKeyMask,
0, win.WindowNumber, NSGraphicsContext.CurrentContext, "?", "?",
false, (ushort) keycode);
Run Code Online (Sandbox Code Playgroud)
密钥代码是从GTK密钥映射确定为44.我使用普通的MonoMac(Cocoa)应用程序确认密钥代码是正确的,但是InterpretKeyEvents也不适用于该应用程序中的事件.我找不到与该命令相关的任何选择器.
我正在尝试在appdomain中创建一个对象:
var type = typeof (CompiledTemplate);
var obj = (CompiledTemplate) domain.CreateInstanceAndUnwrap (
type.Assembly.FullName, type.FullName);
Run Code Online (Sandbox Code Playgroud)
但是,我总是收到以下错误:
无法转换透明代理以键入"Mono.TextTemplating.CompiledTemplate".
我运行的是.NET 4.0,而不是Mono,尽管命名空间可能会提示:)
据我所知,当.NET认为类型和程序集在两个域中不完全匹配时会发生此错误.但是,在调试时,FullName和Location是相同的.只有Assembly.Codebase属性不同 - 在子AppDomain中,由于某种原因,它的扩展名大写为"DLL".
我已经尝试将AssemblyResolve处理程序添加到AppDomain,它使用Assembly.LoadFrom显式加载文件名,但CodeBase的扩展仍然是大写的.由于原始程序集也加载了Assembly.LoadFrom(通过Mono.Addins),CodeBase值之间的差异似乎很奇怪.
有关修复或解决此问题的建议吗?
使用MSBuild批处理时,是否可以依赖检查每个输出的多个输入?
我以为我通过在输出文件的元数据中构建输入列表找到了解决方案,如下所示:
<ItemGroup>
<Foo Include="output1">
<Inputs>input1a;input1b</Inputs>
</Foo>
<Foo Include="output2">
<Inputs>input2a;input2b</Inputs>
</Foo>
</ItemGroup>
<Target Name="_CompileFoo" Outputs="@(Foo)" Inputs="%(Foo.Inputs)">
<FooCompiler Src="%(Foo.Inputs)" Out="@(Foo)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
但是,MSBuild抱怨文件"input1a; input1b"不存在.似乎string-> items转换发生在表达式求值之前.
除了编写自己的依赖项检查之外,还有其他解决方案吗?
在MonoDevelop中使用MonoTouch-Solution重命名我的命名空间后,我无法构建应用程序,因为找不到UI组件的所有引用插座.
我已经在Interface Builder中重新打开了我的XIB,更改了一些并保存了它,但代码仍然无法运行.
我想,IB元素并不关心MonoTouch中定义的命名空间.有办法解决这个问题吗?
.net ×1
appdomain ×1
c# ×1
cocoa ×1
gtk ×1
ios ×1
macos ×1
macos-carbon ×1
mono ×1
monodevelop ×1
msbuild ×1
remoting ×1
xamarin ×1
xamarin.ios ×1