我似乎永远无法让 HasOverflowContent
在 RichTextBlock
上触发,即使我强制它更新其布局也是如此。这是我尝试过的:
public MainPage()
{
this.InitializeComponent();
RichTextBlock block = new RichTextBlock();
RichTextBlockOverflow overflow = new RichTextBlockOverflow();
block.OverflowContentTarget = overflow;
block.Width = 100;
block.Height = 100;
Paragraph paragraph = new Paragraph();
for (int i = 0; i < 1000; i++)
{
Run run = new Run();
run.Text = "FILLER";
paragraph.Inlines.Add(run);
}
block.Blocks.Add(paragraph);
block.UpdateLayout();
if (block.HasOverflowContent)
{
// This line will never be hit.
}
MainGrid.Children.Add(block);
}
为什么 HasOverflowContent
没有向它发出实际上有溢出内容的信号?
编辑:好的,我能够在 MainPage
构造函数上订阅 this.Loaded
并且在这种情况下此设置确实正确显示,但是,它不是对于我的应用程序来说已经足够好了,那么如何在加载事件之外检查它呢?
最佳答案
因此,看起来必须将其添加到可视化树中。否则它不会渲染它。添加后,我可以调用 RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();并等待 renderTargetBitmap.RenderAsync(contentToBePrinted);我可以通过在不透明度为 0 的网格中添加 RichTextBlock 并将所有 RichTextBlockOverflow 也在运行时添加到该网格,从而使它适用于从 Metro 应用程序进行打印,这样我就可以让它们呈现并检查 HasOverflowContent 标志。这是我让它按照我想要的方式工作的唯一方法。
关于c# - 如何检测 RichTextBlock 在 Windows 应用商店应用程序中是否有溢出内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20599672/