我需要滚动文本块文本。例如,文本块包含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中添加文本时,滚动查看器不会将其滚动条更改为所需的高度。
答案 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区域中键入时,匹配单词集将显示在下拉列表中。
也许你正在做别的事情,但我想发布这个以防万一你试图重新发明轮子。