Silverlight – get insertion position in TextBox

How to get the insertion position (x,y) in the visible client area of ​​the TextBox control? I need to add auto-completion in the text box.

I found a solution for WPF, but it cannot be applied in Silverlight.

public class AutoCompleteTextBox: TextBox
{
public Point GetPositionFromCharacterIndex(int ​​index)
{
if (TextWrapping == TextWrapping.Wrap) throw new NotSupportedException();

var text = Text.Substring(0, index);

int lastNewLineIndex = text.LastIndexOf(' ');

var leftText = lastNewLineIndex != -1? text.Substring(lastNewLineIndex + 1): text;

var block = new TextBlock
{
FontFamily = FontFamily,
FontSize = FontSize,
FontStretch = FontStretch,
FontStyle = FontStyle,
FontWeight = FontWeight
};

block. Text = text;
double y = block.ActualHeight;

block.Text = leftText;
double x = block.ActualWidth;

var scrollViewer = GetTemplateChild("ContentElement") as ScrollViewer;

var point = scrollViewer != null
? New Point(x-scrollViewer.HorizontalOffset, y-scrollViewer.VerticalOffset)
: new Point(x, y);
point.X += BorderThickness.Left + Padding.Left;
point.Y += BorderThickness.Top + Padding.Top;

return point;
}
}

How to get the insertion position (x,y) in the visible client area of ​​the TextBox control? I need to add auto-completion in the text box.

I found a solution for WPF, but it cannot be applied in Silverlight.

public class AutoCompleteTextBox: TextBox
{
public Point GetPositionFromCharacterIndex(int ​​index)
{
if (TextWrapping == TextWrapping.Wrap) throw new NotSupportedException( );

var text = Text.Substring(0, index);

int lastNewLineIndex = text.LastIndexOf(' ');

var leftText = lastNewLineIndex != -1? text.Substring(lastNewLineIndex + 1): text;

var block = new TextBlock
{
FontFamily = FontFamily,
FontSize = FontSize,
FontStretch = FontStretch,
FontStyle = FontStyle,
FontWeight = FontWeight
};

block.Text = text;
double y = block.ActualHei ght;

block.Text = leftText;
double x = block.ActualWidth;

var scrollViewer = GetTemplateChild("ContentElement") as ScrollViewer;

var point = scrollViewer != null
? new Point(x-scrollViewer.HorizontalOffset, y-scrollViewer.VerticalOffset)
: new Point(x, y);
point .X += BorderThickness.Left + Padding.Left;
point.Y += BorderThickness.Top + Padding.Top;

return point;
}
}

Leave a Comment

Your email address will not be published.