自分の質問に答える...:
ウィジェットを再描画するための複雑なコードを探していましたが、ソリューションはとてもシンプルです...必要なのは、EventBox.VisibleWindow メンバーを「false」に設定することだけです (デフォルトでは「true」です)。EventBox は描画されず、EventBox 内の画像に透明な領域がある場合、その下にあるものが表示されます。
以下の例では、
mapBox.VisibleWindow = false; です。
および
pinBox.VisibleWindow = false;
私が見る限り、Z オーダー (どのウィジェットが上にあるか) は、画面上での描画の順序によって決まります (EventBox が描画されていない場合、EventBox.GdkWindow.Lower() または Raised()メンバーは何もしていません)。
例:
// Showing a map in an invisible EventBox
EventBox mapBox = new EventBox();
mapBox.Visible = true;
mapBox.VisibleWindow = false;
fixed1.Add(mapBox);
fixed1.Move (mapBox, 0, 0);
Image mapImage = new Image("map.png");
mapImage.Visible = true;
mapBox.Add (mapImage);
// Showing a pin image with transparent areas, in an invisible EventBox, on top of the map
EventBox pinBox = new EventBox();
pinBox.Visible = true;
pinBox.VisibleWindow = false;
fixed1.Add(pinBox);
fixed1.Move (pinBox, 60, 60);
Image pinImage = new Image("redpin.png");
pinImage.Visible = true;
pinBox.Add (pinImage);