2009-05-19 6 views
9

도움이 필요합니다. 이것이 가능한지 모르십시오. 다음을 갖고 싶습니다.wpf textbox textwrapping

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox TextWrapping="Wrap" MinLines ="5"/> 
    </Grid> 

너비가 * 인 그리드 열 안에 배치 된 텍스트 상자입니다. 나는 모든 너비 (즉 *)를 사용할 수있는 텍스트 상자를 원한다. 그러나 사용자가 텍스트를 추가 할 때 줄의 끝 (사용할 수있는 공간)에 도달하면 줄 바꾸기를 원한다.

현재 위 내용은 전체 너비로 텍스트 상자를 제공하지만 텍스트를 입력하면 텍스트 상자의 너비가 텍스트와 함께 커집니다.

내가 MaxWidth =를 설정할 수 있다는 것을 알고 있지만, 열의 위치는 * 내가 열의 크기를 모른다는 것입니다.

텍스트 상자에 "wpf를 가져다 주면 그 이상을 증가시키지 말고 성장하지 마십시오."라고 말하고 싶습니다.

wpf는 컨트롤의 크기를 묻기 때문에 사용자가 경계를 벗어나는 추가 텍스트를 추가 할 때 친절하게 더 많은 공간을 요청하고 너비를 무한대로 확장하므로 원하는 내용이 불가능하다고 생각합니다.

답변

9

TextBoxMaxWidth 속성을 별표 표시된 열의 속성 인 ActualWidth에 바인딩하십시오 (이 작업을 수행하려면 열 이름을 지정해야합니다). 나는 과거에 이런 짓을 한 것으로 확신한다. 같은

뭔가 :

MaxWidth={Binding ElementName=MyColumn, Path=ActualWidth} 

행운을 빕니다!

+0

ColumnDefinition의 ActualWidth 속성이 DependencyProperty가 아니고 MaxWidth가 항상 0이기 때문에 정상적으로 작동하지 않습니다. 지금 테스트 ... – Vale

0

TextBox에 Grid.Column="1"을 설정하면 제대로 작동하는 것 같습니다. RandomEngy에 대한 Grid.Column="1"을 말씀하는 것 외에도

+0

+1 전화를 걸면 TextBox 두 번째 열에 표시하라는 말을 듣지 않았습니다 (의도 한대로). :) – Pwninstein

+0

나는 그가 0 열에 그것을 원한다고 가정합니다. – Crispy

+0

그는 위의 상태 : "... 어느 폭이있는 그리드 열 안쪽에 배치 텍스트 상자입니다". 너비가 "="인 열은 두 번째 열 (Grid.Column = "1")입니다. – Pwninstein

0

, 당신은 또한이 (예를 들어,이 StackPanel) 다른 아이 Stretch 행동을 다른 컨테이너 내부에 설정되어 특히 경우 Grid 자체에 약간의 정렬 속성을 설정해야 할 수도 있습니다.

+0

"일부 정렬 속성들"? 어느 것, 그리고 무엇에? – Anthony

+0

@ Anthony : 그리드 자체의 호스팅 방식에 달려 있습니다. WPF 요소의 크기 조정 동작은 요소 자체뿐 아니라 요소를 호스팅하는 데에도 종속됩니다. 이 동작을 보려면 창 내부의 StackPanel 안에 Button (w/text)을 만듭니다. StackPanel의 방향을 변경하고 Button의 크기 조절 동작 차이를 관찰하십시오 ... – micahtan