WPF: получение AccessText в ScrollViewer для переноса - PullRequest
2 голосов
/ 04 января 2011

У меня есть Grid, содержащий ScrollViewer, содержащий AccessText.Я хочу, чтобы AccessText занимал всю ширину ScrollViewer, которая должна занимать всю ширину Grid, без переполнения.В настоящее время содержимое моего AccessText обрезается с правой стороны экрана вместо переноса.Я попытался установить AccessText.TextWrapping в Wrap, WrapWithOverflow, и я также попытался полностью удалить свойство.Я переключился на использование Grid вместо StackPanel, потому что думал, что это может повлиять на размер содержимого, но это не помогло.Вот что у меня есть:

<Grid MaxHeight="40">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto"
                  HorizontalScrollBarVisibility="Auto">
        <AccessText Text="{Binding MyLongTextField}"/>
    </ScrollViewer>
</Grid>

Ответы [ 3 ]

1 голос
/ 04 января 2011

Когда вы устанавливаете ColumnDefinition Width на Auto, ScrollViewer внутри него не будет ограничен «видимой шириной» столбца, поэтому он все равно будет занимать столько горизонтального пространства, сколько ему нужно. С xaml, который вы разместили, я думаю, Width="*" подойдет вашим потребностям. Для ScrollViewer кажется, что вы не хотите, чтобы он мог прокручивать по горизонтали, а только по вертикали? В этом случае установите HorizontalScrollBarVisibility="Disabled". В противном случае вы получите горизонтальную полосу прокрутки.

<Grid MaxHeight="40">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto"
                  HorizontalScrollBarVisibility="Disabled">
        <AccessText TextWrapping="Wrap" Text="{Binding MyLongTextField}"/>
    </ScrollViewer>
</Grid>
0 голосов
/ 04 января 2011

Это дало мне то, что я хотел:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" MaxHeight="40"
                  HorizontalScrollBarVisibility="Disabled"
                  VerticalScrollBarVisibility="Auto">
        <AccessText Text="{Binding CRData.Error}" TextWrapping="Wrap"/>
    </ScrollViewer>
</Grid>

Спасибо Мелеак и Аарону за предложение использовать * для ширины столбцавместо Auto и Мелеаку за предложение Disabled для горизонтальной полосы прокрутки вместо Auto.

0 голосов
/ 04 января 2011

Если вы просто хотите, чтобы AccessText оборачивался бесконечно, измените ваш второй ColumnDefinition с Auto на * и переместите AccessText вне ScrollViewer, как показано ниже ...

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
             <TextBlock Text="Whee a label:" Grid.Column="0"/>
             <AccessText Grid.Column="1" TextWrapping="Wrap" Text="{Binding MyLongTextField}"/>
    </Grid>

Причина, по которой текст не переносится, заключается в том, что второй ColumnDefinition был установлен на Auto;который по существу не устанавливает границы вокруг AccessText.

Если вы хотите сохранить ScrollViewer, попробуйте это ...

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto">
        <AccessText  TextWrapping="Wrap" Text="{Binding MyLongTextField}"/>
    </ScrollViewer>
</Grid>
...