c# - GTK# 窗口未完全呈现

标签 c# mono monodevelop raspbian gtk#

现在,我正在尝试在 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/

相关文章:

c# - 数据库恢复后查询超时

c# - 单例设计模式是获得数据库连接的首选

unity-game-engine - 如何从 MonoDevelop 启动本地 Unity API 引用

c# - 让 gtk# 应用程序在 Windows 上运行的最简单方法

c# - 使用 sqlmetal 为 npgsql 生成 linq 类

c# - 表单提交成功后如何显示成功信息

c# - 如何在 Xamarin.Android/Monodroid 中使用 Android KitKat EvaluateJavascript 并检索结果?

c# - 使用 Mono 5 编译包含 ValueTuple 的 C# 7 代码

android - 单核细胞增多症。 Xamarin。加载 svg 图像时出错。 System.MethodAccessException异常

.net - 如何开始使用单声道分析器 2.8?