WPF没有找到NameScope来注册名称

时间:2015-06-30 10:47:55

标签: wpf

我正在尝试创建一个“调试”TextBlock,在某种意义上它就像一个MessageBox,但不会像它一样中断。相反,它就像一个状态栏,它以静默方式提供输出信息。这是我目前的代码

private void Debug(string data)
    {
        TextBlock tb = componentContainer.FindName("Debugbox") as TextBlock;
        if (tb == null)
        {
            MessageBox.Show("yo");
            tb = new TextBlock() {Foreground = Brushes.Orange };
            if (NameScope.GetNameScope(tb) == null)
                NameScope.SetNameScope(tb, new NameScope());
            componentContainer.RegisterName("Debugbox", tb);
            componentContainer.Children.Add(tb);
        }
        tb.Text = data;
    }

然而,它给了我“No NameScope发现注册名称”。我试过替换

componentContainer.RegisterName("Debugbox", tb);

Namescope.GetNameScope(tb).RegisterName("Debugbox", tb);

它运作良好。但是如果多次使用此函数,则会简单地覆盖TextBlock,这使得难以看到所需的输出。

注意:componentContainer是Canvas

有谁知道我做错了什么?或者有更好的方法来做类似的事情吗?

1 个答案:

答案 0 :(得分:0)

为什么不简单地将TextBlock实例保存在私有字段中:

private TextBlock debugBox;

private void Debug(string data)
{
    if (debugBox == null)
    {
        debugBox = new TextBlock { Foreground = Brushes.Orange };
        componentContainer.Children.Add(debugBox);
    }
    debugBox.Text = data;
}