GTK C# IconView получить количество столбцов - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть виджет IconView, встроенный в ScrolledWindow, и я хочу знать, каков текущий счетчик столбцов, для реализации vim-подобной (h / j / k / l) навигации.

IconView.Columns возвращает -1 (не инициализировано), и, насколько я понимаю, это свойство используется для принудительного указания определенного числа столбцов c. Поскольку я хочу, чтобы число столбцов можно было настроить с помощью ScrolledWindow, мне нужен какой-то способ получить текущее количество столбцов, но я не смог найти ничего об этом в документации.

В настоящее время я пытаюсь вычислить максимально возможные столбцы из Allocation of my IconView _view:

        public void OnKeyPress(Key key)
        {
            var nColumns = (_view.Allocation.Width - _view.Margin * 2 - _view.ItemPadding) /
                           (IconSize + _view.ItemPadding + _view.Margin);
...
            var path = key switch
            {
                // Left
                Key.h => new TreePath(new[] {Math.Max(index - 1, 0)}),
                // Right
                Key.l => new TreePath(new[] {Math.Min(index + 1, _store.IterNChildren() - 1)}),
                // Down
                Key.j => new TreePath(new[] {Math.Min(index + nColumns, _store.IterNChildren() - 1)}),
                // Up
                Key.k => new TreePath(new[] {Math.Max(index - nColumns, 0)}),
                // No Change
                _ => _view.SelectedItems[0]
            };

            _view.SelectPath(path);
            _view.ScrollToPath(path);
...

Этот вид работает, но есть сценарий ios, где это не удается (например, когда почти достаточно места для другого столбца).

Так что мой вопрос будет таким: есть ли простой способ

  • получить отображаемое в данный момент количество столбцов?
  • или реализовать навигацию h / j / k / l в другой способ, поскольку в IconView?
уже встроено движение клавиш со стрелками
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...