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;
}
}