Silverlight 4 C # - Как показать всплывающее окно в текстовом месте из пользовательского контроля пользователя? - PullRequest
2 голосов
/ 23 января 2011

Я пытаюсь создать в своем приложении функцию проверки орфографии, которая будет отображать всплывающее окно возможных исправлений в списке.

Я не нашел приличной документации о том, как создать, а затем сослаться на пользовательский пользовательский контроль или как получить координаты определенного фрагмента текста.

Есть ли у кого-нибудь пример кода о том, как создать пользовательский элемент управления с всплывающим окном в нем и как затем ссылаться и показывать это всплывающее окно из основного приложения? Также было бы неплохо вычислить смещения по X и Y для некоторого выделенного текста в текстовом поле, поэтому я могу расположить всплывающее окно справа и чуть ниже орфографической ошибки.

Заранее спасибо!

-Sootah

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Представьте, что у вас есть элемент управления richttextbox, называемый richtextbox. Затем, когда вы выбираете какой-то текст и нажимаете кнопку, вы можете создать всплывающий элемент управления с вашим пользовательским элементом управления UserControl. Затем определите положение текста относительно вашего визуального корня и вуаля:)

    richtTextBox.Selection.Text =
         "Lorem ipsum pro falli dicunt volumus te, ex velit probatus corrumpit per. His ex reque aperiam alienum, liber indoctum per an. Sed ei nibh cibo minim, et eam graeci suavitate. Vim iusto gubergren repudiandae ei.";

private void testButton_Click(object sender, RoutedEventArgs e)
{
    var rect = richtTextBox.Selection.Start.GetCharacterRect(System.Windows.Documents.LogicalDirection.Forward);
    var richtTextBoxPosition =
        richtTextBox.TransformToVisual(Application.Current.RootVisual).Transform(new Point(0, 0));

    var popup = new Popup()
                    {
                        HorizontalOffset = richtTextBoxPosition.X + rect.X,
                        VerticalOffset = richtTextBoxPosition.Y + rect.Y + richtTextBox.FontSize,
                        Height = 150,
                        Width = 100
                    };
    popup.Child = new ListBox()
    {
        Background = new SolidColorBrush(Colors.Red),
        Height = 150,
        Width = 100
    }; // use your custom UC here
    popup.IsOpen = true;
}

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

http://strugglesofacoder.blogspot.com/2011/02/show-popup-under-text-in-rich-textbox.html

0 голосов
/ 21 февраля 2011

То, что вы, вероятно, ищете, чтобы всплывающее окно, было ChildWindow .Этот элемент управления по умолчанию создает наложение на текущий элемент управления при его отображении и небольшое настраиваемое всплывающее окно с ним.

Для ваших целей я бы рекомендовал создать новый настраиваемый элемент управления, наследуя его непосредственно от элемента управления ChildWindow.Здесь есть небольшое руководство по использованию / созданию дочернего окна здесь .Чтобы оно появилось в вашем тексте, вам нужно определить координаты, где находится орфографическая ошибка, затем передать ее в ChildWindow и соответствующим образом установить поля.

...