簡體   English   中英

如何查看scrollviewer子元素是否可見,如果不可見,則使其可見?

[英]How can I see whether a scrollviewer child element is visible, and make it visible if it isn't?

在scrollviewer中,我有一個帶有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)是否可見,如果看不到,請使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>

這是背后的代碼。 它很難找到運行編號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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM