c# - 如何检测 RichTextBlock 在 Windows 应用商店应用程序中是否有溢出内容?

标签 c# .net microsoft-metro windows-store-apps richtextblock

我似乎永远无法让 HasOverflowContentRichTextBlock 上触发,即使我强制它更新其布局也是如此。这是我尝试过的:

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/

相关文章:

c++ - 在 Windows Metro 中以编程方式从网格中删除对象

c# - 像在 C# linq 中一样在 Java 8 中获取匿名对象

c# - C# 未初始化的变量危险吗?

c# - Unity C# 中嵌套字典的奇怪行为

c# - 模拟网络服务调用......有时

xaml - 数据绑定(bind)到 ComboBox c++/cx XAML Metro 应用程序时 SelectedValue、SelectedIndex 的问题

c# - 代码背后的安全 ASP.NET .CS

c# - 添加的 Double 值不一致

c# - 如何在字典中存储任意数量的任意类型的数组

c# - 在 Windows 8 中针对 metro 和非 metro 目标平台进行多目标定位