现在,我正在尝试在Debian(Raspbian)系统上使用Mono和GTK#开发一个程序。
我面临的问题是,完全随机地,GUI(由Stetic设计师或其动态元素生成)未完全绘制,缺少Label元素或整个小部件中的几个字符,主要是那些动态创建的。这是它在对话窗口上的显示方式:http://imgur.com/oEZRg7c(文本被截断)
只要一个窗口显示此问题,每个其他窗口都会出现相同的问题,有时会丢失整个窗口小部件,即使这些窗口是在之后创建的。解决方案通常是退出程序并重新打开它,因为它只是随机发生的。
这就是我的大多数窗口的构造函数的样子(Build()
之后的部分变化):
public partial class ErrorSolutionDialog : Gtk.Dialog
{
public ErrorSolutionDialog (string errorMessage, string solutionHint)
{
this.WidthRequest = this.Screen.Width;
this.HeightRequest = this.Screen.Height;
this.Maximize ();
this.Fullscreen ();
this.KeepAbove = true;
this.DestroyWithParent = false;
Build ();
this.ErrorMessage.Markup = "<b><span size='xx-large'>" + errorMessage + "</span></b>";
this.SolutionHint.Text = solutionHint;
}
}
答案 0 :(得分:1)
我不会说在Xamarin Studio / Monodevelop中使用Stetic设计器很糟糕,但是作为任何软件,它肯定都有一些问题。
此外,在任何软件环境中使用任何设计人员都将永远将您与该开发平台联系起来。最后,创建的源代码几乎不可维护,除了对你来说完全陌生。
这就是为什么我总是建议摆脱设计师的原因。您可以关注Gtk# tutorial such as this one,然后您会发现这很简单,也很有价值。并且您将完全控制您的代码。
关于Gtk#的基础知识正在创建一个包含VBoxes和HBox的布局。例如,以下代码创建一个布局,您可以在对话框中使用TreeView和TextView。
var swWin1 = new Gtk.ScrollWindow();
var swWin2 = new Gtk.ScrollWindow();
// TextView
this.txtView = new Gtk.TextView();
swWin1.AddWithViewport( this.txtView );
// TreeView
this.tvView = new Gtk.TreeView();
swWin2.AddWithViewport( this.tvView );
// Layout
var hBox = new HBox( false, 2 );
hBox.PackStart( swWin1, true, true, 5 );
hBox.PackStart( swWin2, true, true, 5 );
this.VBox.PackStart( hBox, true, true, 5 );
PackStart()是一种魔术方法,可以将小部件添加到布局中。布尔告诉Gtk扩展小部件。 ScrollWindow 将滚动条添加到任何小部件。
最后,我建议使用 Gtk.Action ,并调用其方法 CreateMenuItem()和 CreateToolItem()为了创建菜单条目和toobar按钮,而不是一次又一次地重复相同的代码。
希望这有帮助。