web-dev-qa-db-ja.com

WPFTextBoxラッピング

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

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

通常の「ラップしない」シナリオに該当しないと言う理由は、アプリが実行されるさまざまな画面サイズをサポートするためにビューをサイズ変更可能に変更する必要があるまで、ラップするために使用されるためです。私がそれをしたとき、(おそらく)ユーザーが何かを入力するとTextBoxが「もっとスペースが必要です」と言うので、TextBoxは折り返しを停止しました。そのため、親は義務を負い、ボックスは無期限に右に続きます(ビューにはスクロールバーが表示されます)。 Binding/relativeSourceを使用してMaxWidthを設定しようとしましたが、親は拡張するように特別に設計されているため、そのアプローチは機能しません。私が起こらなければならないのは、ボックスが「親を含む」の幅である必要があるということですVisibleWidth。つまり、ウィンドウ自体が1024x768の場合、TextBoxのMaxWidthは1024であり、それ以降のテキストは自動的に折り返されますが、ウィンドウが1280x1024に拡大すると、ボックスは1280になり、それに応じてテキストが折り返されます。このバインディング式を使用してこのシナリオを試しましたが、うまくいきませんでした。

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

ウィンドウのサイズ自体は拡大していないので、ウィンドウの幅(TabControlの一部であるタブの幅をカバーするために一定の量を差し引いたもの)を取得できれば、それでうまくいくと思います。

何か案は?

12
RubyHaus

ビューにはスクロールバーが表示されますが

水平スクロールビューを無効にして、強制的に折り返すようにします。 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>
16
MichaelS