Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用FlowDocumentPageViewer时确定内联元素的页码?_C#_Wpf_Flowdocument - Fatal编程技术网

C# 使用FlowDocumentPageViewer时确定内联元素的页码?

C# 使用FlowDocumentPageViewer时确定内联元素的页码?,c#,wpf,flowdocument,C#,Wpf,Flowdocument,我的应用程序中有一个FlowDocumentPageViewer控件,可以通过编程方式遍历FlowDocument中的每个块和内联元素(这是因为它是键入应用程序的一部分,这样做可以提供视觉提示,告诉用户键入什么)。每次更改我关注的内联元素时,我都想检查内联元素所在的页面,如果它不在当前页面上,则导航到它所在的页面 如果这是不可能的,请建议任何替代解决方案 另外,如果有必要的话,我处理的每个内联元素都是Run元素。您只是想自动导航到页面吗?如果是这样的话,我们不需要知道页码,应该可以直接使用Bri

我的应用程序中有一个FlowDocumentPageViewer控件,可以通过编程方式遍历FlowDocument中的每个块和内联元素(这是因为它是键入应用程序的一部分,这样做可以提供视觉提示,告诉用户键入什么)。每次更改我关注的内联元素时,我都想检查内联元素所在的页面,如果它不在当前页面上,则导航到它所在的页面

如果这是不可能的,请建议任何替代解决方案


另外,如果有必要的话,我处理的每个内联元素都是Run元素。

您只是想自动导航到页面吗?如果是这样的话,我们不需要知道页码,应该可以直接使用BringIntoView?我想你是指那个街区吧

按下按钮时,以下代码将导航至第301S块所在的页面

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        FlowDocument fd = new FlowDocument();

        for (int i = 0; i < 1000; i++)
        {
            fd.Blocks.Add(new Paragraph(new Run(i.ToString())));
        }

        view.Document = fd;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        (view.Document as FlowDocument) .Blocks.Skip(300).First().BringIntoView();
    }

}
它没有闪烁或任何东西在测试应用lol!但我的同伴不喜欢这样,所以他建议:

var ddp = (DynamicDocumentPaginator)view.Document.DocumentPaginator;
var position = ddp.GetObjectPosition(document.Blocks.Skip(300).First());
var page = ddp.GetPageNumber(position);

请注意,它是0索引的,而不是从1开始的“lol”方法。您只是想自动导航到该页面吗?如果是这样的话,我们不需要知道页码,应该可以直接使用BringIntoView?我想你有没有提到这个街区

按下按钮时,以下代码将导航至第301S块所在的页面

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        FlowDocument fd = new FlowDocument();

        for (int i = 0; i < 1000; i++)
        {
            fd.Blocks.Add(new Paragraph(new Run(i.ToString())));
        }

        view.Document = fd;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        (view.Document as FlowDocument) .Blocks.Skip(300).First().BringIntoView();
    }

}
它没有闪烁或任何东西在测试应用lol!但我的同伴不喜欢这样,所以他建议:

var ddp = (DynamicDocumentPaginator)view.Document.DocumentPaginator;
var position = ddp.GetObjectPosition(document.Blocks.Skip(300).First());
var page = ddp.GetPageNumber(position);

请注意,它是0索引的,而不是从1开始的“lol”方法。谢谢,这正是我所需要的。一旦我被允许,我会给你赏金的。谢谢,这正是我需要的。一旦我被允许,我会给你赏金的。