텍스트 상자가 크기를 조정하지만 사용자 입력에서 성장하지 않도록합니다.

StackOverflow https://stackoverflow.com/questions/604952

  •  03-07-2019
  •  | 
  •  

문제

창 안에는 다음과 같은 텍스트 상자가 정의되어 있습니다.

<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을 너비 = "*"로 변경하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top