Прокрутите ListViewItem, чтобы быть в верхней части ListView

Для Расширения решения для SQL счета, можно в основном сделать то же использование плоской антенной решетки. Далее больше, если Ваши строки, у всех есть та же длина и Ваше максимальное количество детей, известны (скажите в двоичном дереве), можно сделать это с помощью единственной строки (символьный массив). Если у Вас есть произвольное число детей, это усложняет вещи немного... Я должен был бы проверить свои старые примечания для наблюдения то, что может быть сделано.

Затем жертвуя небольшим количеством памяти, особенно если Ваше дерево редко и/или несбалансировано, Вы можете, с небольшим количеством индексной математики, доступ все строки случайным образом путем хранения дерева, ширина сначала в массиве как так (для двоичного дерева):

String[] nodeArray = [L0root, L1child1, L1child2, L2Child1, L2Child2, L2Child3, L2Child4] ...

эй знают Вашу длину строки, Вы знаете это

, я работаю теперь, так не может провести много времени на нем, но с интересом я могу выбрать немного кода, чтобы сделать это.

Мы используем, чтобы сделать это для поиска в двоичных деревьях, сделанных из кодонов DNA, процесс создал дерево, тогда мы сгладили его к шаблонам искомого текста и, когда найдено, хотя индексная математика (отворот сверху) мы возвращаем узел... очень быстрый и эффективный, жесткий, что наше дерево редко имело пустые узлы, но мы могли искать гигабайты данных в один миг.

13
задан Ray 3 July 2009 в 00:57
поделиться

1 ответ

Одна возможность:

String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";

- это возможность (при совпадении без учета регистра). Это немного беспорядок, и намеренно игнорирует случай, когда кавычки не используются. Чтобы представить его, не беспокоясь о побегах строк:

<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]*>

Это соответствует:

  • один или несколько символов, которые не являются > (т.е. возможные другие атрибуты)
  • src
  • необязательный пробел
  • =
  • необязательный пробел
  • начальный разделитель ' или "
  • источник изображения (который может не включать одинарные или двойные кавычки)
  • конечный разделитель
  • , хотя выражение на этом можно остановить, я добавил:
    • ноль или более символов, не являющихся > (другие возможные атрибуты)
    • > , чтобы закрыть tag

На заметку:

  • Если вы хотите также включить src = , переместите открытую скобку дальше влево: Раньше я использовал нечто подобное для работы с настраиваемой прокруткой, и мы можем использовать это и здесь.

    public static DependencyObject GetScrollViewer(DependencyObject o)
    {
        if (o is ScrollViewer)
        { return o; }
    
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
        {
            var child = VisualTreeHelper.GetChild(o, i);
    
            var result = GetScrollViewer(child);
            if (result == null)
            {
                continue;
            }
            else
            {
                return result;
            }
        }
    
        return null;
    }
    

    Теперь нам просто нужно обработать событие SelectionChanged. Поскольку мы пытаемся прокрутить элемент в начало списка, лучший вариант - прокрутить вниз, а затем повторно прокрутить вверх до выбранного элемента. Как вы сказали, ScrollIntoView будет прокручиваться только до тех пор, пока элемент не станет видимым, и поэтому, как только выбранный элемент достигнет вершины, когда он прокручивается назад, он перестанет оставлять нас с нашим выбранным элементом в самом верху списка.

    private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ScrollViewer scrollViewer = GetScrollViewer(uiListView) as ScrollViewer;
        scrollViewer.ScrollToBottom();
    
        uiListView.ScrollIntoView(e.AddedItems[0]);
    }
    
17
ответ дан 1 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: