텍스트 상자가 크기를 조정하지만 사용자 입력에서 성장하지 않도록합니다.
문제
창 안에는 다음과 같은 텍스트 상자가 정의되어 있습니다.
<Window x:Class="NS.MainWindow"
...
SizeToContent="WidthAndHeight">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition MinWidth="200" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition MinHeight="50" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>
<TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" />
</Grid>
</Window>
문제는 텍스트 상자에서 사용자가 유형을 입력하면 최소 만 설정되므로 오른쪽으로 확장된다는 것입니다. 내가 정말로 원하는 것은 다음 줄로 포장하는 텍스트입니다. 열의 minwidth를 대신 너비로 변경하면이 작업을 수행 할 수 있습니다. 그러나이 작업을 수행하면 창이 크기가 커지면 텍스트 상자가 더 이상 크기가 커지지 않습니다.
둘 다 가질 수있는 방법이 있습니까? (즉, 창 크기 조정에서만 크기를 조정하고, 그렇지 않으면 랩)
해결책
당신 이이 행동을하는 이유는 당신이 설정했기 때문입니다. Window의 Sizetocontent 속성 - 기본적으로 컨텐츠에 의해 요청 된 크기에 따라 창을 크기를 조정할 수 있습니다. 더 많은 물건을 입력 할 때 텍스트 박스는 더 많은 공간이 필요하다고 말합니다. 창이 순종적으로 자랍니다. Sizetocontent 속성을 설정하지 않으면 텍스트 상자가 성장하지 않습니다.
그래서 Sizetocontent Property Setter를 잃고 비례 그리드 크기를 사용한다고 말합니다. 여기서 나는 열#2 열#1의 너비를 두 배로 만든다고 말합니다. 그리드의 기본 "Stretch"값 그리드의 수평 정렬 및 수직 식별 값은 컨트롤이 창 크기 조정에서 올바르게 크기를 조정해야합니다.
<Window ...
Title="MyWindow" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip"
MinWidth="300" Width="300" Height="80">
<Grid x:Name="myGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" MinWidth="100"/>
<ColumnDefinition Width="2*" MinWidth="200" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition MinHeight="50" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>
<TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow"/>
</Grid>
Sizetocontent 속성 세터를 위의 코드 스 니펫에 다시 추가하면 텍스트 상자가 처음에 텍스트 내용으로 자라는 이상한 동작이 표시됩니다. 이상한 ... 그 행동을 설명 할 수 없습니다.
HTH
다른 팁
WPF의 텍스트 박스에는 해당 옵션이 내장되어 있지 않은 것 같습니다.
이 문제를 해결하기 위해 원하는 (0, 0) 크기를보고하는 사용자 정의 텍스트 상자를 사용할 수 있습니다. 못생긴 해킹이지만 작동합니다.
MainWindow.xaml.cs 파일에서 :
namespace NS
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
...
}
// Ugly HACK because the regular TextBox doesn't allow autoresize to fit the parent but NOT autoresize when the text doesn't fit.
public class TextBoxThatDoesntResizeWithText : TextBox
{
protected override Size MeasureOverride(Size constraint)
{
return new Size(0, 0);
}
}
}
그런 다음 mainwindow.xaml 파일에서 :
<Window x:Class="NS.MainWindow"
...
xmlns:local="clr-namespace:NS"
SizeToContent="WidthAndHeight">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition MinWidth="200" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition MinHeight="50" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>
<local:TextBoxThatDoesntResizeWithText Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" />
</Grid>
</Window>
두 번째 columnDefinition을 너비 = "*"로 변경하십시오.