Silverlight 3 прокрутки текстового блока в коде - PullRequest
2 голосов
/ 25 февраля 2010

Мне нужно прокрутить текстовый блок текста. Например, текстовый блок содержит 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 ]

1 голос
/ 26 февраля 2010

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

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

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);
        }
    }
0 голосов
/ 26 февраля 2010

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

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

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

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

...