Silverlight 3 прокрутки текстового блока в коде

Мне нужно прокрутить текстовый блок текста. Например, текстовый блок содержит 700 слов. Эти слова заполняются в текстовом блоке из кода сзади, поскольку это могут быть разные 700 слов в зависимости от некоторого "материала". В этой форме также есть текстовое поле. Пользователь вводит слова в текстовом блоке в текстовое поле. По мере ввода я отслеживаю, какое слово из текстового блока они находятся. Однако не все слова в текстовом блоке будут помещаться в области просмотра текстового блока, поэтому мне нужно прокрутить текстовый блок из кода позади. Как мне сделать это?

Я использую Silverlight 3.

Спасибо Шеннон

может быть полезно поместить некоторый код в... Вот прокрутка и текстовый блок

            <ScrollViewer x:Name="svSourceText" Width="591" MaxHeight="202" VerticalScrollBarVisibility="Auto">

                <TextBlock Height="202" Width="591"  TextWrapping="Wrap" 
                x:Name="txtSource" FontSize="12" FontFamily="Fonts/Fonts.zip#Consolas" LineHeight="21.333"
                           />

        </ScrollViewer>

для начинающих.. когда я добавляю текст в txtSource, средство просмотра прокрутки не меняет свою полосу прокрутки на необходимую высоту.

2 ответа

Решение

Поместите TextBlock в просмотрщик. Захватите событие, когда пользователь вводит текст в ваш TextBox. Убедитесь, что это действительно для слова, которое в настоящее время захватывается, а затем прокрутите TextBlock.

Вот пример. Я просто прокручиваю каждый раз, когда пользователь нажимает пробел, вы хотите проверить правильность введенного слова.

XAML:

    <Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="25" />
        <RowDefinition Height="40" />
    </Grid.RowDefinitions>

    <TextBox Name="txtInput" KeyUp="TextBox_KeyUp" Width="200" Grid.Row="0" />

    <ScrollViewer Name="scrollViewer" Grid.Row="1" MaxHeight="25" MaxWidth="250" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Hidden">            
        <TextBlock>
            One
            <LineBreak />
            Two
            <LineBreak />
            Three
            <LineBreak />
            Four
            <LineBreak />
            Five
        </TextBlock>

    </ScrollViewer>


</Grid>

И код для события "KeyUp":

        private void TextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key.ToString().ToLower() == "space")
        {
            scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + 15);
        }
    }

Просто мысль, вы рассматривали возможность использования AutoCompleteBox контроль?

Вы можете привязать его ItemsSource к ObservableCollection<string> он содержит все текущие слова и может добавлять или удалять слова по мере необходимости.

По мере того, как пользователь вводит текст в поле "Текстовое поле" автозаполнения, набор подходящих слов появляется в раскрывающемся списке.

Возможно, вы делаете что-то еще, но я подумал просто опубликовать это на случай, если окажется, что вы пытаетесь заново изобрести колесо.

Другие вопросы по тегам