现在,我正在尝试在 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;
}
}
最佳答案
我不会说在 Xamarin Studio/Monadevelop 中使用 Stetic 设计器不好,但作为任何一款软件,它肯定存在一些问题。
此外,在任何软件环境中使用任何设计器都会使您永远依赖于该开发平台。最后,除了对您来说完全陌生之外,创建的源代码将难以维护。
这就是为什么我总是建议摆脱设计师。可以关注一个Gtk# tutorial such as this one ,您会发现这既简单又有益。您将完全彻底地控制您的代码。
Gtk# 的基础知识是使用 VBoxes 和 HBoxes 创建布局。例如,以下代码创建了一个布局,在该布局中,您将在对话框中拥有一个 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() 是一种神奇的方法,可以将小部件添加到布局中。 bool 值告诉 Gtk 展开小部件。 ScrollWindow 向任何小部件添加滚动条。
最后,我的建议是对于任何操作,使用 Gtk.Action,并调用它的方法 CreateMenuItem() 和 CreateToolItem()为了创建菜单条目和工具栏按钮,而不是一次又一次地重复相同的代码。
希望这对您有所帮助。
关于c# - GTK# 窗口未完全呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31875860/