2011-10-19 45 views
10

Tôi đang cố gắng tìm ra cách để có được một hộp văn bản để bọc nội dung của nó, tuy nhiên tình hình không hoàn toàn giống với kịch bản "không bọc" điển hình. textbox của tôi được chứa bên trong một DataTemplate được sử dụng bên trong một trường hợp Telerik RadTabControl (sử dụng một ContentTemplatePresenter để xác định xem để hiển thị) và XAML cho DataTemplate trông như thế này:Bao bì hộp văn bản WPF

<DataTemplate x:Key="NotesTemplate"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Use the box below to record any general notes associated with this item." Style="{StaticResource Default}" /> 
     <TextBox TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" GridRow="1" Margin="20" Text="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" /> 
    </Grid> 
</DataTemplate> 

Lý do tôi nói nó doesn' t rơi theo kịch bản bình thường "nó không bọc" là nó được sử dụng để bọc cho đến khi tôi đã phải thay đổi xem để được thay đổi kích thước để bất cứ điều gì để hỗ trợ các kích thước màn hình khác nhau ứng dụng sẽ được chạy trên. Khi tôi đã làm điều đó, TextBox ngừng gói bởi vì (có lẽ) là người dùng gõ một cái gì đó TextBox nói "Tôi cần nhiều không gian hơn" để phụ huynh bắt buộc và hộp tiếp tục ra bên phải vô thời hạn (mặc dù khung nhìn được thanh cuộn). Tôi đã thử thiết lập một MaxWidth bằng cách sử dụng Binding/RelativeSource, nhưng vì cha mẹ được thiết kế đặc biệt để phát triển cách tiếp cận đó sẽ không hoạt động. Điều tôi cần phải xảy ra là hộp phải là chiều rộng của 'cha mẹ có chứa' VisibleWidth. Có nghĩa là, nếu cửa sổ chính nó là 1024x768, MaxWidth của TextBox sẽ là 1024 và bất kỳ văn bản nào sau đó sẽ tự động bao bọc, nhưng nếu cửa sổ tăng lên 1280x1024, bây giờ hộp sẽ là 1280 và văn bản bọc cho phù hợp. Tôi cố gắng kịch bản này với biểu hiện ràng buộc này, nhưng không may mắn:

MaxWidth="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=ActualWidth}" 

Kích thước cửa sổ riêng của mình không đang phát triển vì vậy nếu tôi có thể có được Width của Window (trừ một số tiền nhất định để trang trải các chiều rộng của các tab được một phần của TabControl) Tôi tin điều đó sẽ hiệu quả.

Bất kỳ ý tưởng nào?

+0

Đã kết thúc tìm kết quả tốt nhất thông qua câu hỏi SO khác: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior. – RubyHaus

Trả lời

13

mặc dù quan điểm được cuộn

Vô hiệu hóa scrollview ngang, vì vậy nó sẽ bị buộc phải quấn. Bạn có thể thử tắt nó trên chính số TextBox hoặc trên gói Grid.

<DataTemplate x:Key="NotesTemplate"> 
    <Grid ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Use the box below to record any general notes associated with this item." Style="{StaticResource Default}" /> 
     <TextBox TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" Grid.Row="1" Margin="20" Text="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" /> 
    </Grid> 
</DataTemplate> 
+0

Điều đó không có tác dụng, nhưng liên kết SO này đã cho tôi 99% con đường ở đó: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior. Điều duy nhất tôi không biết là nếu họ thay đổi kích thước cửa sổ trở lại độ phân giải nhỏ hơn, hộp vẫn giữ nguyên độ rộng ban đầu, nhưng tôi không chắc liệu điều đó có quan trọng với tôi hay không và tôi đang nghiêng về phía không. – RubyHaus

+0

@digitall: Tôi chỉ chạy mã ở đây và nó hoạt động tốt (chỉ là lưới). Có lẽ các gói điều khiển khác làm rối tung nó lên. – MichaelS

+0

Trong một ô lưới có 8 cột (có một cột được đặt tự động), hộp văn bản có cột columnspan = "8", lớp bọc không hoạt động, hộp văn bản tự động tăng kích thước của nó; ( – lunair

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