как дать прокрутку в текстовом поле? - PullRequest
6 голосов
/ 06 мая 2011

я взял текстовое поле

         <TextBox Height="218" HorizontalAlignment="Stretch" Margin="0,56,0,0" Name="txtBox" VerticalAlignment="Top" TextWrapping="Wrap"
             Text="" GotFocus="txtBox_GotFocus" TextChanged="txtBox_TextChanged" IsTabStop="True" 
             IsEnabled="True" IsHitTestVisible="True" VerticalScrollBarVisibility="Auto" Background="White" FontFamily="Tahoma" />       

Теперь, когда я ввожу много текста в текстовое поле, текст прокручивается автоматически Я хочу показать полосу прокрутки, с помощью которой пользователь может просматривать весь текст. Как это сделать.

Ответы [ 6 ]

4 голосов
/ 06 мая 2011

Вы можете использовать простой ScrollViewer, например:

<ScrollViewer Height="219" VerticalScrollBarVisibility="Auto">
    <TextBox  VerticalAlignment="Top" TextWrapping="Wrap" Height="Auto" HorizontalAlignment="Left" Name="textBox1" Text="TextBox" Width="460">

    </TextBox>
</ScrollViewer>

Это в случае, если текст вводится вертикально.Вы можете сделать то же самое для горизонтальной прокрутки, но этот метод не совсем надежен из-за того, что он не прокручивается автоматически при реализации по умолчанию (как я показал).

Как правило, я бы просто рекомендовал переопределить шаблон для элемента управления по умолчанию.

2 голосов
/ 06 мая 2011

Нет простого решения этой проблемы.Кроме того, если вы разрешаете кому-либо вводить большой объем текста, возможно, что при добавлении большего количества строк вы достигнете предела высоты (2048 пикселей), наложенного на элементы UIElements.

Если вам нужно, чтобы пользователи могли вводитьбольшое количество текста, вам следует рассмотреть возможность помещения элемента Input в элемент управления WebBrowser и использования его вместо поля.

1 голос
/ 25 мая 2012

Два простых шага для этого:

  1. Создать TextBox_TextInputStart обработчик событий.
  2. при условии, что ваш scrollviewer назван sv, а текстовое поле -txtbx, добавьте следующие строки в метод обработчика событий
 this.sv.UpdateLayout();
 this.sv.ScrollToVerticalOffset(this.txtbx.ActualHeight);
0 голосов
/ 27 февраля 2016

Вы должны связать стиль текстового поля с этим пользовательским стилем

<Style x:Key="ScrollableTextBox"
           TargetType="TextBox">
        <Setter Property="FontFamily"
                Value="{StaticResource PhoneFontFamilyNormal}" />
        <Setter Property="FontSize"
                Value="{StaticResource PhoneFontSizeMediumLarge}" />
        <Setter Property="Background"
                Value="{StaticResource PhoneTextBoxBrush}" />
        <Setter Property="Foreground"
                Value="{StaticResource PhoneTextBoxForegroundBrush}" />
        <Setter Property="BorderBrush"
                Value="{StaticResource PhoneTextBoxBrush}" />
        <Setter Property="SelectionBackground"
                Value="{StaticResource PhoneAccentBrush}" />
        <Setter Property="SelectionForeground"
                Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}" />
        <Setter Property="BorderThickness"
                Value="{StaticResource PhoneBorderThickness}" />
        <Setter Property="Padding"
                Value="2" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                    <Grid Background="Transparent">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="MouseOver" />
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
                                                                       Storyboard.TargetName="MainBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="Transparent" />
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
                                                                       Storyboard.TargetName="MainBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="{StaticResource PhoneDisabledBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
                                                                       Storyboard.TargetName="ContentElement">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="{StaticResource PhoneDisabledBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="ReadOnly">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                                                       Storyboard.TargetName="MainBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <Visibility>Collapsed</Visibility>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                                                       Storyboard.TargetName="ReadonlyBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <Visibility>Visible</Visibility>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
                                                                       Storyboard.TargetName="ReadonlyBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="{StaticResource PhoneTextBoxBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
                                                                       Storyboard.TargetName="ReadonlyBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="{StaticResource PhoneTextBoxBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
                                                                       Storyboard.TargetName="ContentElement">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="{StaticResource PhoneTextBoxReadOnlyBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="FocusStates">
                                <VisualState x:Name="Focused">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background"
                                                                       Storyboard.TargetName="MainBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="{StaticResource PhoneTextBoxEditBackgroundBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush"
                                                                       Storyboard.TargetName="MainBorder">
                                            <DiscreteObjectKeyFrame KeyTime="0"
                                                                    Value="{StaticResource PhoneTextBoxEditBorderBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Unfocused" />
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Border x:Name="MainBorder"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Background="{TemplateBinding Background}"
                                Margin="{StaticResource PhoneTouchTargetOverhang}" />
                        <Border x:Name="ReadonlyBorder"
                                BorderBrush="{StaticResource PhoneDisabledBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Background="Transparent"
                                Margin="{StaticResource PhoneTouchTargetOverhang}"
                                Visibility="Collapsed" />
                        <Border BorderBrush="Transparent"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Background="Transparent"
                                Margin="{StaticResource PhoneTouchTargetOverhang}">
                            <ScrollViewer x:Name="ContentElement"
                                          BorderThickness="0"
                                          HorizontalContentAlignment="Stretch"
                                          Margin="{StaticResource PhoneTextBoxInnerMargin}"
                                          Padding="{TemplateBinding Padding}"
                                          VerticalContentAlignment="Stretch" />
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Вот прокрутка с текстовым полем

<ScrollViewer Grid.Row="1"
              VerticalScrollBarVisibility="Auto"
              HorizontalScrollBarVisibility="Disabled"
              MaxHeight="120" />

<TextBox Grid.Row="1"
         AcceptsReturn="True"
         TextWrapping="Wrap"
         InputScope="Chat"
         Style="{StaticResource ScrollableTextBox}" />

пример проекта ссылка на проект

0 голосов
/ 08 августа 2015

Windows Phone по умолчанию не имеет прокрутки для TextBox, но вы можете изменить стиль для его поддержки.Смотрите эту ссылку .

0 голосов
/ 06 мая 2011

Есть небольшое исправление, которое вы можете сделать, когда создаете средство просмотра прокрутки, установите высоту, на которую вы хотите разместить текстовое поле, а затем поместите текстовое поле большего размера под ним.Если бы вы хотели, чтобы высота вашего текстового поля была равна 500, то вы бы установили эту высоту для средства просмотра прокрутки и установите для текстового поля значение больше.

<ScrollViewer Height="500" VerticalScrollBarVisibility="Auto">
    <TextBox Height="1000" />
</ScrollViewer>

Это основная идея, но она должна быть в состоянииделать то, что вы хотите сделать.Имейте в виду, что Мэтт сказал об ограничениях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...