- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想加载大的 .rtf 文件并滚动到其中的特定段落。
所以我做了这样的事情:
private FlowDocument GenerateDocument(string path)
{
var doc = new FlowDocument();
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read))
{
var content = new TextRange(doc.ContentStart, doc.ContentEnd);
content.Load(fs, DataFormats.Rtf);
}
return doc;
}
然后,我查找带有书签的段落并想滚动到那里。像这样:
private void ScrollToBookmark(string bookmark)
{
Paragraph p = LookUp(bookmark);
if (p != null) p.BringIntoView();
}
LookUp 是一个查找所需段落的函数,它运行良好,并返回先前加载的文档中的段落。
然后……什么也没发生。有什么建议吗?
我使用 FlowDocumentReader 来显示我的 Flowdocument。 BringIntoView 在 ScrollMode 和 PageMode 下都不起作用。
通过逻辑树直接访问 FlowDocumentReader 的滚动查看器并使用它进行操作不是一种选择。我只是不知道要滚动到哪里,如果可能的话,我宁愿不使用任何“技巧”。
最佳答案
好的,我发现了一个问题。
问题是,当您加载新的 FlowDocument 时,段落会异步加载,因此如果您在加载文档后立即调用 paragraph.BringIntoView() - 段落尚不存在,因此什么也不会发生。
这里是一些细节:https://support.microsoft.com/en-us/kb/959084
您需要检查 paragraph.IsLoaded 属性,如果它尚未加载,您需要捕获 Loaded 事件并在那里调用 BringIntoView()。
这是我使用的代码,它运行良好:
private void BringToViewParagraph(Paragraph paragraph)
{
if (paragraph.IsLoaded) paragraph.BringIntoView();
else
{
paragraph.Loaded += paragraphLoaded;
}
}
void paragraphLoaded(object sender, RoutedEventArgs e)
{
Paragraph paragraph = (Paragraph)sender;
paragraph.Loaded -= paragraphLoaded;
paragraph.BringIntoView();
}
关于WPF Flowdocument paragraph.BringIntoView() 不适用于新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193269/
我在事件处理程序后面有这段代码: private void comboActiveStudentAssignmentType_SelectionChanged(object sender, Selec
在 WPF 中,我有一个带有 7 个不同组框的滚动查看器。每个组框都是它自己的不同形式的单独部分。由于滚动查看器太长,我在面板左侧的堆栈面板中放置了一系列按钮,并完成了代码隐藏,以便单击按钮触发相应组
在我的 MVVM 应用程序中,我有一个树 View ,应该在选择时将树 View 项带入 View 。树 View 表示数据库中的记录。每个树 View 项通过在选择时展开项来按需加载其子项。 树 V
背景:我在 ScrollViewer 中定义了一个 usercontrol 以及一个 ContentControl,ContentControl 将始终可见,其中有一个Button,当点击按钮时会将u
我想加载大的 .rtf 文件并滚动到其中的特定段落。 所以我做了这样的事情: private FlowDocument GenerateDocument(string path) {
当您在 WPF 中的 TreeView 上设置 VirtualizingStackPanel.IsVirtualizing="True" 时: 调用 Tree
我希望用户能够在 TreeView 中搜索项目。输入搜索文本后,TreeViewItem 应滚动到 View 中。 现在我正在为 TreeView、TreeViewItems 和 MainView 使
我是一名优秀的程序员,十分优秀!