我用的是Gtk#,不过原理大概和普通的GTK3是一样的。我创建了默认的 GtkApplication,并将以下几行添加到脚手架中以显示带有多行文本的消息对话(示例中为 50)。
问题是当行数过多时,对话窗口会长出屏幕高度,导致下面的按钮不可见。有没有办法让它在消息过长时显示垂直滚动条,并确保对话不会超出屏幕高度?
Gtk.MessageDialog
里有这样的功能吗,还是我必须使用自定义对话窗口?
private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow"))
{
builder.Autoconnect(this);
DeleteEvent += Window_DeleteEvent;
_button1.Clicked += Button1_Clicked;
var lines = new List<string>();
for (int i = 0; i < 50; i++)
{
lines.Add("Line " + i);
}
var m = new Gtk.MessageDialog(this,
DialogFlags.Modal,
MessageType.Warning,
ButtonsType.Cancel,
string.Join("\r\n", lines)
);
var res = m.Run();
m.Destroy();
}
我认为
GtkMessageDialog
不存在此功能。如果您想要对话框的特殊行为,您应该使用更通用的 GtkDialog
并允许在其“内容区域”中指定小部件的类型。寻找
相当于 Gtk# 中的gtk_get_content_area
。此函数返回一个GtkBox
,您可以在其中打包您想要的任何小部件。你可以在里面打包一些带有滚动条的东西。
在 Gtk3 演示(启动
gtk3-demo
)中寻找“交互式对话框”以查看示例。它也可以在 Gnome 存储库(在 C 中)中获得。