wpf, как ограничить MaxLength TextBox? - PullRequest
1 голос
/ 02 декабря 2010
<TextBox Height="?" Width="?" AcceptReturn="true" />

Высота = Случайная;Ширина = Случайные;Например, Высота равна 60, Ширина равна 100. Как управлять введенной длиной текста меньше размера TextBox

Ответы [ 2 ]

6 голосов
/ 02 декабря 2010

Использование MaxLength

EDIT:

Подожди, что? Вы хотите ограничить количество символов шириной TextBox? Почему это?

EDIT2:

Вы можете измерить длину строки, используя Graphics.MeasureString . Вот метод расширения, который делает то, что вы хотите:

public static class TextBoxExtension
{
    public static int VisibleCharCount(this textBox textBox)
    {
        int count = 0;

        do {
            count++;
            var testString = new string('X', count);
            var stringWidth = System.Drawing.Graphics.MeasureString(testString, textBox.Font);                
        } while (stringWidth < textBox.Width);

        if (stringWidth == textBox.Width) 
            return count;
        else
            return count-1;
    }
}

Используйте это так:

myTextBox.MaxLength = myTextBox.VisibleCharCount();

EDIT3:

Если ваш TexBox является MultiLine и вы также хотите учесть высоту, вы можете использовать перегрузку MeasureString, которая принимает Size. Я оставляю на ваше усмотрение изменить мой пример соответствующим образом.

0 голосов
/ 02 декабря 2010

Используйте свойство MaxLength для TextBox, которое может быть довольно статичным после инициализации.

ИЛИ

Вы можете отменить текстввод с событием PreviewTextInput:

textbox.PreviewTextInput += textbox_PreviewTextInput;

void textbox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
   TextBox box = (TextBox) sender;
   e.Handled = box.Text.Length > 5;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...