2012-08-07 5 views
0

WPF 응용 프로그램에 텍스트 상자가 있습니다. 내가 설정했습니다 AcceptReturntrue 하지만 사용자가 입력 할 때 텍스트 상자를 크게 만들 필요가 있습니다. 사용자가 Enter 키를 클릭하면 현재 커서가 새로운 줄로 이동하지만 텍스트 상자는 여전히 같은 높이이고 위의 줄은 이제 숨겨져 있음을 의미합니다. textboxHeight를 내용에 따라 동적으로 변경할 수 있습니까?사용자가 새 줄을 이동할 때 텍스트 상자의 높이가 동적으로 변경됨

감사

PS : 나는 그것을 현재 크기를 유지하기 위해 나는 텍스트 상자

답변

1
내가 제안

함께있을 필요가 텍스트 영역을 사용하여 수직 스크롤을 사용할 수 없습니다. 하지만 실제로 필요한 작업을 수행하는 경우 TextBox를 Grid에 배치하십시오. 눈금 행 높이를 auto로 설정하십시오. TextBox의 높이를 Auto로 설정하십시오. 텍스트 상자의 VerticalAlignment를 Stretch로 설정합니다. 아래의 코드에서 나는 스크롤바 설정을 남겨 두었습니다. 어떻게 보이는지 바꿀 수 있습니다.

 <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <TextBox Grid.Row="0" x:Name="scriptTextBox" Margin="10" Height="Auto" Width="Auto" FontFamily="Consolas, Courier New" 
       HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
       MaxLines="9999" AcceptsReturn="True" AcceptsTab="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
       Text="{Binding Path=Script, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
       /> 
    </Grid> 
0

텍스트 상자를 사용해야한다고 말합니다. 적어도 재정의 텍스트 상자를 사용할 수 있습니까? 이것은 제 테스트에서 꽤 잘 작동했습니다 :

public class AutoHeightTextbox : TextBox { 

    protected override Size ArrangeOverride(Size arrangeBounds) { 
     Size unboundSize = new Size(this.Width, double.PositiveInfinity); 
     Size textSize = base.MeasureOverride(unboundSize); 
     this.Height = textSize.Height; 
     return base.ArrangeOverride(arrangeBounds); 
    } 

} 
관련 문제