У меня возникла проблема, когда я хочу, чтобы текстовые поля в моем приложении динамически изменяли размер с помощью окна, но не расширялись, когда пользователь вводит текст.Динамический размер TextBox, который не расширяется с помощью ввода?
Однако после поиска не будет видно, что существует общее решение для исправления всех текстовых полей приложения, кроме добавления привязок XAML для объектов MaxWidth
и MaxHeight
текстового поля.
Таким образом, я создал следующий контроль автоматически заблокировать текстовые поля размеры после Measure()
вызова:
<TextBox x:Class="GUI.Views.Controls.FixedTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008">
</TextBox>
public partial class FixedTextBox : TextBox
{
public FixedTextBox()
{
InitializeComponent();
}
protected override Size MeasureOverride(Size constraint)
{
UnboundDimensions();
var measured = base.MeasureOverride(constraint);
BoundDimensions();
return measured;
}
private void UnboundDimensions()
{
MaxWidth = Double.PositiveInfinity;
MaxHeight = Double.PositiveInfinity;
}
private void BoundDimensions()
{
MaxWidth = ActualWidth > 0 ? ActualWidth : Double.PositiveInfinity;
MaxHeight = ActualHeight > 0 ? ActualHeight : Double.PositiveInfinity;
}
}
Это решение отлично работает, но мне было интересно, если есть, может быть, лучше, прежде чем я пройду через свой код XAML и изменю текстовые поля на свой пользовательский элемент управления ...?
Edit (Проблема Пример): https://dl.dropboxusercontent.com/u/28956841/TextBoxTrouble.zip
<Window x:Class="TextBoxTrouble.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="150" Width="500">
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<Grid Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Labels"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="5"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="Labels"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Grid.Column="0"
Grid.Row="0"
VerticalContentAlignment="Center">Label 1</Label>
<TextBox Grid.Column="1"
Grid.Row="0"
Margin="10">Some text</TextBox>
<Label Grid.Column="3"
Grid.Row="0"
VerticalContentAlignment="Center">Label 2</Label>
<TextBox Grid.Column="4"
Grid.Row="0"
Grid.RowSpan="2"
Margin="10"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
AcceptsReturn="True"
TextWrapping="Wrap">Some multiline text</TextBox>
</Grid>
</ScrollViewer>
</Window>
Я не думаю, что у меня когда-либо была проблема, которую вы описываете. Можете ли вы опубликовать небольшую полную программу, демонстрирующую такое поведение, которое вы описываете? «MainWindow.xaml» и «.cs» будут в порядке. Я подозреваю, что проблема может быть у родителя «TextBox». – Steve
Согласовано @Steve. У меня никогда не было автоматического расширения текстового поля для заполнения контента. Что-то еще происходит. Покажите нам свой файл xaml, как было задано. – Thraka
Вот пример проблемы: https://dl.dropboxusercontent.com/u/28956841/TextBoxTrouble.zip –