Ответ tehMick абсолютно верен: вам определенно следует создать контейнер для изменения размера, а не настраивать сам TextBox. И если это работает для вас, GridSplitter
- это очень хорошее встроенное решение.
У меня была такая же ситуация, но GridSplitter не работал, поэтому я создал элемент управления "ResizeBorder", который обрабатывал перетаскивание мышью по его четырем углам, чтобы изменить размер в двух измерениях, или середину сторон, чтобы изменить размер в одном. На самом деле это очень простой код: просто обработайте MouseDown, установите локальную переменную, указывающую местоположение MouseDown и перетаскиваемый край / угол, а затем на MouseMove обновите размер.
Мой ResizeBorder был пригоден для стилевого оформления, поэтому я мог показать только четыре прямоугольника по углам и линии по бокам или что-нибудь более сложное, что я мог придумать.
Кроме того, обратите внимание, что независимо от того, используете ли вы Grid и GridSplitters, ResizeBorder или что-то еще, у вас есть выбор размещения функции изменения размера либо вокруг элемента управления следующим образом:
<my:ResizeBorder ...>
<TextBox ... />
</my:ResizeBorder>
или обновив ControlTemplate для самого TextBox:
<ControlTemplate x:Key="ResizableTextBox" TargetType="{x:Type TextBox}">
<my:ResizeBorder>
...
</my:ResizeBorder>
</ControlTemplate>
...
<TextBox Template="{StaticResource ResizableTextBoxTemplate}" ... />
Преимущества этого последнего метода в том, что вы можете использовать стиль или присоединенное свойство, чтобы сделать размер TextBoxes изменяемым, и что вы можете легко изменять изменяемый размер TextBox динамически в коде.