Silverlight 4 C# - 如何在自定义usercontrol的文本位置显示弹出窗口?

时间:2011-01-23 04:08:15

标签: c# silverlight xaml web-applications silverlight-4.0

我正在尝试在我的应用程序中创建一个拼写检查功能,该功能会在列表框中显示可能的更正。

我没有找到关于如何创建然后引用自定义用户控件的任何体面文档,或者如何获取特定文本片段的坐标。

有没有人有一些关于如何使用弹出窗口制作自定义用户控件的示例代码,以及如何引用并显示主应用程序中的弹出窗口?同时计算文本框中某些选定文本的X和Y偏移也很好,所以我可以将弹出窗口放在右侧和拼写错误的正下方。

提前致谢!

-Sootah

2 个答案:

答案 0 :(得分:2)

想象一下,你有一个名为richtextbox的richttextbox控件。然后,当您选择一些文本并按下按钮时,您可以使用自定义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

答案 1 :(得分:0)

你可能想要弹出的是ChildWindow。默认情况下,此控件在显示时会在当前控件上创建一个叠加层,并在其上创建一个小的可自定义弹出窗口。

出于您的目的,我建议您直接从ChildWindow控件继承来创建新的自定义控件。关于子窗口here的使用/创建的小教程。要使它出现在您的文本中,您需要确定拼写错误的位置的某种坐标,然后将其传递到ChildWindow并适当地设置边距。