2009-05-19 48 views
9

Tôi cần trợ giúp. Không biết nếu điều này là có thể. Tôi muốn có các thông tin sau:wpf textbox textwrapping

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

là hộp văn bản bao bọc bên trong cột lưới có chiều rộng *. Tôi muốn hộp văn bản để có tất cả các chiều rộng có sẵn (do đó *) nhưng khi người dùng thêm văn bản tôi muốn nó để bọc khi nó được đến cuối dòng (với không gian có sẵn).

Hiện tại ở trên sẽ cung cấp hộp văn bản có toàn bộ chiều rộng nhưng khi văn bản được nhập chiều rộng của hộp văn bản chỉ tăng cùng với văn bản.

Tôi biết tôi có thể đặt MaxWidth = ?, nhưng điểm mà cột là * là tôi không biết kích thước của cột là gì.

Tôi muốn nói với hộp văn bản "không phát triển, bất cứ điều gì wpf cung cấp cho bạn mang nó và không tăng thêm một pixel trên đó". Tôi nghĩ rằng những gì tôi muốn là không thể, bởi vì wpf yêu cầu kiểm soát nó muốn lớn đến mức nào và khi người dùng thêm nhiều văn bản vượt quá ranh giới, nó yêu cầu nhiều không gian hơn và mở rộng chiều rộng của nó thành vô cùng.

Trả lời

9

Hãy thử ràng buộc thuộc tính MaxWidth của số TextBox của bạn vào thuộc tính ActualWidth của cột có gắn sao của bạn (bạn sẽ phải đặt tên cho cột của mình để thực hiện việc này). Tôi khá chắc chắn tôi đã làm một cái gì đó như thế này trong quá khứ.

Cái gì như:

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

Chúc may mắn!

+0

Điều này có vẻ ổn nhưng không hoạt động vì thuộc tính ActualWidth của ColumnDefinition không phải là DependencyProperty và MaxWidth sẽ luôn là 0. Thử nghiệm ngay bây giờ ... – Vale

0

Dường như hoạt động bình thường cho tôi khi tôi đặt Grid.Column="1" trên Hộp văn bản.

+0

+1 Cuộc gọi tốt, tôi không nhận thấy rằng Hộp văn bản không được nói sẽ được hiển thị trong cột thứ hai (như anh ta dự định nó). :) – Pwninstein

+0

Tôi giả định anh ấy muốn nó trong cột 0. – Crispy

+0

Anh ấy nói ở trên: "... là một hộp văn bản gói bên trong một cột lưới có chiều rộng *". Cột có chiều rộng = "*" là cột thứ hai (Grid.Column = "1"). – Pwninstein

0

Ngoài những gì RandomEngy nói về Grid.Column="1", bạn cũng có thể thiết lập một số thuộc tính liên kết trên Grid bản thân, đặc biệt là nếu nó được đặt bên trong thùng chứa khác với khác nhau hành vi của trẻ Stretch (ví dụ một StackPanel).

+0

"Một số thuộc tính căn chỉnh"? Cái nào, và cái gì? – Anthony

+0

@ Anthony: Nó phụ thuộc vào cách chính Grid được lưu trữ. Hành vi định cỡ của phần tử WPF phụ thuộc không chỉ vào chính phần tử mà còn phụ thuộc vào phần tử nào đang lưu trữ nó. Để thấy điều này trong hành động, tạo một nút (w/text) bên trong một StackPanel, bên trong một cửa sổ. Thay đổi hướng của StackPanel và quan sát sự khác biệt trong hành vi kích thước của Button ... – micahtan

Các vấn đề liên quan