我以前认为直接从另一个派生的类,没有任何修改,将表现出与基础相同的行为。 GTK#事件框似乎不是这种情况。当封装在Notebook中时,带有StateType.Normal的EventBox的背景与从EventBox派生的自定义小部件的背景不同。这是VisibleWindow on。
问题已在编译下方的代码片段中重现,以将输出作为图像附加。编辑:修复窗口初始化。
class TestBox : EventBox {
}
class MainClass {
public static void Main (string[] args) {
Application.Init();
Window win = new Window(WindowType.Toplevel);
Table table = new Table(2, 2, true);
Notebook notebook1 = new Notebook();
notebook1.ModifyBg(StateType.Normal, new Gdk.Color(255, 0, 0));
notebook1.AppendPage(GetTestPair(), new Label("Test"));
table.Attach(notebook1, 0, 1, 0, 1);
Notebook notebook2 = new Notebook();
notebook2.AppendPage(GetTestPair(), new Label("Test"));
table.Attach(notebook2, 1, 2, 0, 1);
EventBox eventbox = new EventBox();
eventbox.ModifyBg(StateType.Normal, new Gdk.Color(255, 0, 0));
eventbox.Add(GetTestPair());
table.Attach(eventbox, 0, 1, 1, 2);
table.Attach(GetTestPair(), 1, 2, 1, 2);
win.Add(table);
win.ShowAll();
Application.Run();
}
public static Widget GetTestPair () {
HBox boxes = new HBox { BorderWidth = 5 };
EventBox box1 = new EventBox() { Child = new Frame("EventBox") };
TestBox box2 = new TestBox() { Child = new Frame("TestBox") };
boxes.PackStart(box1);
boxes.PackStart(box2);
return boxes;
}
}
我Macbook Air上的输出如下。窗口的每个四分之一都包含一个EventBox / TestBox并排用于比较。第一行显示它们直接附加到表(与预期相同的行为);第二行在笔记本中显示它们然后附加到表格(显示不同的背景)。为了清晰度和对比度,第一列被赋予了红色背景。
有谁知道为什么会发生这种情况,或者是否有任何解决方法来标准化背景颜色?感谢。