2011-10-19 11 views
10

テキストボックスに内容をラップする方法を理解しようとしていますが、状況は「ラップしない」というシナリオとはまったく同じではありません。私のテキストボックスには、(表示するビューを決定するためにContentTemplatePresenterを使用して)Telerik RadTabControlインスタンス内で使用されたDataTemplateの内部に収容されているとのDataTemplateのためのXAMLは次のようになります。WPF TextBox Wrapping

<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> 

私はそれはdoesnの言う理由通常の "それはラップしない"シナリオでは、アプリケーションが実行されるさまざまな画面サイズをサポートするために、サイズを変更できるようにビューを変更するまで、ラップするのに使用されます。私が行ったとき、TextBoxはラップを停止しました。なぜなら、ユーザーがTextBoxに「私はより多くのスペースが必要です」というメッセージが表示されているからです(つまり、ビューにはスクロールバーが表示されますが)。私はBinding/RelativeSourceを使ってMaxWidthを設定しようとしましたが、親はそのアプローチを成長させるために特別に設計されているので動作しません。私は何が起こる必要があるボックスは、ボックスがその 'の親を含む'の幅でなければならないVisibleWidth。つまり、Window自体が1024x768の場合、TextBoxのMaxWidthは1024になり、それ以降のテキストは自動的に折り返されますが、Windowが1280x1024に拡大すると、ボックスは1280になり、それに応じてテキストが折り返されます。私はこのバインディング式でこのシナリオではなく、運を試してみました:

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

私がしているタブの幅をカバーするためにウィンドウの幅(マイナス一定量を得ることができれば、それ自体はそれほど高まっていないウィンドウのサイズTabControlの一部)私はそれが動作すると信じています。

アイデア?

+0

別のSOの質問で最良の結果を見つけました:http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior – RubyHaus

答えて

13

ビューがスクロールバー

を取得しますが、ラップするように強制されるように、水平scrollViewを無効にします。 TextBox自体またはラップ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

それはうまくいきませんでしたが、このSOのリンクは私にその方法の99%を与えました:http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior。私が知りません唯一のことは、彼らが元の幅を保持する小さな解像度に戻ってウィンドウのサイズを変更する場合ですが、私はそれが問題かどうか、私はない方に傾いているかどうかはわかりません。 – RubyHaus

+0

@digitall:ここでコードを実行したところ、うまく機能しました(グリッドのみ)。多分、他のラッピングコントロールがそれを混乱させるかもしれません。 – MichaelS

+0

8列(autoに設定された列が1つ)のグリッド、columnspan = "8"のテキストボックス、折り返しが機能しない、テキストボックスのサイズが自動的に増加する、( – lunair