带有GTK#的右对齐弹出菜单

本文关键字:菜单 右对齐 GTK# 带有 | 更新日期: 2023-09-27 17:57:34

我在应用程序的最右边有一个按钮。当点击时,我想在按钮下面显示一个菜单,但与它对齐。(想想谷歌chrome菜单)。

这就是我目前所拥有的:

protected virtual void HandleMenuClicked (object sender, System.EventArgs e)
{
    Menu menu = new Menu();
    menu.Add(new MenuItem("About"));
    menu.ShowAll();
    menu.Popup(null,null,MenuPosition,0,0);
}
private void MenuPosition(Menu menu, out int x, out int y, out bool pushIn)
{
    _menuButton.ParentWindow.GetOrigin(out x, out y);
    int menuWidth = 75; //need to look up actual width.
    x += _menuButton.Allocation.X - menuWidth;
    y += _menuButton.Allocation.Y + _menuButton.Allocation.Height;
   pushIn = true;
}

问题是我对菜单的宽度进行了硬编码。如果添加了更长的菜单项,字体或主题发生了更改,则对齐方式将错误。

我试着如下查找菜单的宽度:

int menuWidth = menu.Allocation.Width;

这不起作用,因为菜单尚未绘制,因此分配宽度为1。

带有GTK#的右对齐弹出菜单

我相信此时可以使用SizeRequest。