Обрабатывать все гиперссылки MouseEnter в загруженном свободном Flowdocument - PullRequest
3 голосов
/ 29 марта 2011

Я новичок в WPF, работаю над своим первым проектом. Я застрял в этой проблеме в течение недели, поэтому я пытаюсь найти помощь здесь.

У меня внутри приложения есть FlowDocumentReader, который загружает несколько FlowDocuments (независимых файлов в виде свободных файлов xaml).

Мне нужно обработать событие MouseEnter для всех гиперссылок в загруженном документе, но я не могу установить MouseEnter = "myHandler" в XAML, поскольку они являются свободными файлами XAML.

Есть ли способ проанализировать de FlowDocument и установить обработчики при его загрузке?

Любое другое решение? Извините за вопрос новичка, большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

После загрузки вашего FlowDocument вы можете перечислить все элементы UIE, используя LogicalTreeHelper.Это позволит вам найти все гиперссылки.Тогда вы можете просто подписаться на их MouseEnter событие.Вот код:

    void SubscribeToAllHyperlinks(object sender, RoutedEventArgs e)
    {
        var hyperlinks = GetVisuals(this).OfType<Hyperlink>();
        foreach (var link in hyperlinks)
            link.MouseEnter += Hyperlink_MouseEnter;
    }

    public static IEnumerable<DependencyObject> GetVisuals(DependencyObject root)
    {
        foreach (var child in LogicalTreeHelper.GetChildren(root).OfType<DependencyObject>())
        {
            yield return child;
            foreach (var descendants in GetVisuals(child))
                yield return descendants;
        }
    }

    private void Hyperlink_MouseEnter(object sender, MouseEventArgs e)
    {
        // Do whatever you want here
    }

Я проверил его с помощью следующего XAML:

<FlowDocumentReader>
    <FlowDocument>
        <Paragraph>
            <Hyperlink>asf</Hyperlink>
        </Paragraph>
    </FlowDocument>
</FlowDocumentReader>
0 голосов
/ 27 июля 2011

Взгляните на http://xtrememvvm.codeplex.com/

Позволяет напрямую подключаться к обработчикам событий из свободных файлов XAML.

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

  • Клей
...