Выровненное по правому краю всплывающее меню с GTK # - PullRequest
1 голос
/ 22 мая 2011

У меня есть кнопка справа от приложения.При нажатии я хочу показать меню под кнопкой, но выровнено по правому краю.(вспомните меню Google 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.

1 Ответ

1 голос
/ 22 мая 2011

Я полагаю, что вы можете использовать SizeRequest в этот момент.

...