2013-12-15 19 views
1

即使我强制更新它的布局,我似乎也无法让HasOverflowContentRichTextBlock上触发。以下是我已经试过:如何检测RichTextBlock在Windows应用商店应用中是否存在溢出内容?

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信号是它呢,其实,有溢出的内容?

编辑:好吧,我可以订阅this.LoadedMainPage构造和这个设置也不过正确地显示在这种情况下,它不适合我的应用不够好,所以我怎么能检查所加载的这个外事件?

+1

+1此处的注释[此处(http://msdn.microsoft.com/en-US/library/windows/apps/windows.ui.xaml.uielement.updatelayout)似乎表示可以使用'UpdateLayout'正是为了这个目的。 – Lukazoid

+0

@Lukazoid这正是我想要做的上面,但它似乎只会在某些情况下工作。我只是不明白的情况! – Alexandru

+1

您是否尝试强制CoreDispatcher在检查标志之前处理挂起的消息,即block.CoreDispatcher.RunAsync(CoreDispatcherPriority.Normal,()=> {})。 – Lukazoid

回答

0

因此,它看起来像它必须被添加到可视化树。否则将不会呈现它。一旦添加,我可以调用RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();并等待renderTargetBitmap.RenderAsync(contentToBePrinted);我可以通过在不透明度为0的Grid中添加RichTextBlock并在运行时将所有RichTextBlockOverflow也添加到该网格,以便我可以让它们渲染并检查HasOverflowContent标志,从而实现从Metro应用程序进行打印的工作。它是我能以我想要的方式工作的唯一方法。

相关问题