C# 如何查看scrollviewer子元素是否可见,如果它不可见,如何使其可见';T
在scrollviewer中,我有一个包含1000条内联线的文本块 XAMLC# 如何查看scrollviewer子元素是否可见,如果它不可见,如何使其可见';T,c#,wpf,visibility,scrollviewer,textblock,C#,Wpf,Visibility,Scrollviewer,Textblock,在scrollviewer中,我有一个包含1000条内联线的文本块 XAML C# public主窗口() { 初始化组件(); 对于(int i=0;i
C#
public主窗口()
{
初始化组件();
对于(int i=0;i<1000;i++)
{
textBlock1.Inlines.Add(新运行(“内联编号”+i.ToString()+”);
}
}
如何查看特定的内联元素(例如,数字850)是否可见,如果不可见,请让scrollviewer滚动以使其可见
我对C#和wpf是相当陌生的
感谢您的帮助。由于运行对象不是视觉对象,您不能像对某些对象那样使用ScrollIntoView。我能够通过定位所需运行的顶部偏移量并指示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是硬编码的
运行目标;
公共主窗口()
{
初始化组件();
对于(int i=0;i<1000;i++)
{
var run=新运行(“内联编号”+i.ToString()+”);
如果(i==850)
目标=运行;
textBlock1.Inlines.Add(运行);
}
}
public void find按钮单击1(对象发送器,路由目标e)
{
var contentStart=target.contentStart;
var rect=contentStart.GetCharacterRect(LogicalDirection.Forward);
scrollViewer1.ScrollToVerticalOffset(垂直顶部);
}
我想我没有回答关于看它是否可见的部分。您可以获得我的代码中的偏移量,并根据可见范围进行测试:[滚动查看器的当前偏移量,偏移量+视口高度],以确定运行是否可见。
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 1000; i++)
{
textBlock1.Inlines.Add(new Run("Inline number " + i.ToString() + ". "));
}
}
<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 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);
}