#c_sharp #wpf
Как измерить размер текста в текстбоксе от края первой буквы до края последней? FormattedText formattedText = new FormattedText(str, CultureInfo.GetCultureInfo("en-us-ru"), FlowDirection.LeftToRight, new Typeface(this.Name_textBox.FontFamily, this.Name_textBox.FontStyle, this.Name_textBox.FontWeight, this.Name_textBox.FontStretch), Name_textBox.FontSize, Brushes.Black); double width = formattedText.Width; Этот способ возвращает размер текстбокса, а нужна именно длина текста. Ничего другого не нашел.
Ответы
Ответ 1
Решение простое — нужно создать на основе вашего текста геометрию и просто посмотреть ее границы: var dpiX = 96.0 * VisualTreeHelper.GetDpi(this).DpiScaleX; var formattedText = new FormattedText( MyTextBox.Text, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface( MyTextBox.FontFamily, MyTextBox.FontStyle, MyTextBox.FontWeight, MyTextBox.FontStretch), MyTextBox.FontSize, Brushes.Black, dpiX); var geometry = formattedText.BuildGeometry(new Point()); var bounds = geometry.Bounds; MessageBox.Show($"{bounds.Width}"); Полный код примера. Разметка:Кодбихайнд: private void Button_Click(object sender, RoutedEventArgs e) { var dpiX = 96.0 * VisualTreeHelper.GetDpi(this).DpiScaleX; var formattedText = new FormattedText( MyTextBox.Text, CultureInfo.InvariantCulture, FlowDirection.LeftToRight, new Typeface( MyTextBox.FontFamily, MyTextBox.FontStyle, MyTextBox.FontWeight, MyTextBox.FontStretch), MyTextBox.FontSize, Brushes.Black, dpiX); var geometry = formattedText.BuildGeometry(new Point()); var bounds = geometry.Bounds; MyCanvas.Height = formattedText.Height; MyCanvas.Width = formattedText.Width; MyPath.Data = geometry; MyRect.Rect = bounds; MessageBox.Show($"Ширина форматированного текста: {formattedText.Width}\nШирина границ: {bounds.Width}"); }
Комментариев нет:
Отправить комментарий