Wpf 将内联转换回WatermarkTextBox

Wpf 将内联转换回WatermarkTextBox,wpf,wpftoolkit,Wpf,Wpftoolkit,我正在使用WPF工具包进行WatermarkTextBox控件 我的应用程序动态连接文本字符串和占位符,以便用户填充空格 foreach(var e in elements) { if (isText) { LetterText.Inlines.Add(new Run { Text = e, BaselineAlignment = BaselineAlignment.Center })

我正在使用WPF工具包进行WatermarkTextBox控件

我的应用程序动态连接文本字符串和占位符,以便用户填充空格

foreach(var e in elements)
{
    if (isText)
    {
        LetterText.Inlines.Add(new Run
        {
            Text = e,
            BaselineAlignment = BaselineAlignment.Center
        });
    }
    else
    {
        LetterText.Inlines.Add(new WatermarkTextBox
        {
            Watermark = e
        });
    }

    isText = !isText;
}
这很好,但当我想重新组合文本时,我的问题就出现了:

foreach(var inline in LetterText.Inlines)
{
    if (inline.GetType() == typeof(Run))
    {
        sb.Append(((Run)inline).Text);
    }
    else if (inline.GetType() == typeof(WatermarkTextBox))
    {
        var wtb = inline as WatermarkTextBox;
        sb.Append(wtb.Text);
    }
}
在编译时,如果没有else子句,则“无法将内联转换为WatermarkTextBox”,则会失败,从内联到运行的转换工作正常

如何从水印文本框中获取文本?

这就成功了:

            if (inline.GetType() == typeof(Run))
            {
                sb.Append(((Run)inline).Text);
            }
            else if (inline.GetType() == typeof(InlineUIContainer))
            {
                var container = inline as InlineUIContainer;
                var wtb = container.Child as WatermarkTextBox;

                if (wtb !=null)
                    sb.Append(wtb.Text);
            }
我不知道为什么InlineUIContainer没有为运行元素隐式创建