在滚动查看器中,我有一个包含1000个内联的文本块,例如
XAML
<Grid>
<ScrollViewer>
<TextBlock Name="textBlock1" TextWrapping="Wrap" />
</ScrollViewer>
</Grid>
C#
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 1000; i++)
{
textBlock1.Inlines.Add(new Run("Inline number " + i.ToString() + ". "));
}
}
如何查看特定的内联元素(例如数字850)是否可见,如果不可见,则让滚动查看器滚动以使其显示。
我是C#和wpf的新手。
感谢您的帮助。
答案 0 :(得分:0)
由于Run对象不是Visual,因此您无法像某些对象那样使用ScrollIntoView。我能够通过找到所需Run的顶部偏移量并指示scrollviewer滚动到该偏移量来完成它。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Button Grid.Row="0" x:Name="findButton" Click="findButton_Click_1">Find It</Button>
<ScrollViewer x:Name="scrollViewer1" Grid.Row="1">
<TextBlock Name="textBlock1" TextWrapping="Wrap" />
</ScrollViewer>
</Grid>
这是代码隐藏。找到Run#850 ...
是难以编码的 Run target;
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 1000; i++)
{
var run = new Run("Inline number " + i.ToString() + ". ");
if (i==850)
target = run;
textBlock1.Inlines.Add(run);
}
}
public void findButton_Click_1(object sender, RoutedEventArgs e)
{
var contentStart = target.ContentStart;
var rect = contentStart.GetCharacterRect(LogicalDirection.Forward);
scrollViewer1.ScrollToVerticalOffset(rect.Top);
}