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>
он содержит все текущие слова и может добавлять или удалять слова по мере необходимости.
По мере того, как пользователь вводит текст в поле "Текстовое поле" автозаполнения, набор подходящих слов появляется в раскрывающемся списке.
Возможно, вы делаете что-то еще, но я подумал просто опубликовать это на случай, если окажется, что вы пытаетесь заново изобрести колесо.