Silverlight 3代码中的滚动文本块

时间:2010-02-25 16:39:57

标签: silverlight silverlight-3.0 scroll textblock

我需要滚动文本块文本。例如,文本块包含700个单词。这些单词从后面的代码填充到文本块,因为它可能是不同的700个单词,具体取决于某些“东西”。此表单上还有一个文本框。用户将文本块中的单词键入文本框。当他们输入时,我会跟踪他们所在的文本块中的哪个单词。但是,并非文本块中的所有单词都适合文本块查看区域,因此我需要从后面的代码中滚动文本块。我该怎么做呢。

我正在使用silverlight 3。

谢谢shannon

可能有助于将一些代码放入...... 这是scrollviewer和文本块

            <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 个答案:

答案 0 :(得分:1)

将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);
        }
    }

答案 1 :(得分:0)

只是想一想,您是否考虑过使用AutoCompleteBox控件?

您可以将其ItemsSource绑定到包含所有当前单词的ObservableCollection<string>,并根据需要添加或删除单词。

当用户在自动完成的TextBox区域中键入时,匹配单词集将显示在下拉列表中。

也许你正在做别的事情,但我想发布这个以防万一你试图重新发明轮子。