Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF未找到用于注册名称的名称范围_Wpf - Fatal编程技术网

WPF未找到用于注册名称的名称范围

WPF未找到用于注册名称的名称范围,wpf,Wpf,我试图创建一个“调试”文本块,从某种意义上说,它就像一个MessageBox,但不像它那样中断。相反,它就像一个状态栏,默默地给出输出信息。这是我目前的代码 private void Debug(string data) { TextBlock tb = componentContainer.FindName("Debugbox") as TextBlock; if (tb == null) { MessageBox

我试图创建一个“调试”文本块,从某种意义上说,它就像一个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;
    }
然而,它给了我“找不到注册名称的名称镜”。我试着换了

componentContainer.RegisterName("Debugbox", tb);

而且效果很好。但是如果这个函数被多次使用,TextBlock就会被简单地覆盖,这使得所需的输出很难看到

注意:componentContainer是画布


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

为什么不简单地将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;
}

为什么不简单地将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;
}

你每次都是tb“tb=new TextBlock()”的新实例,这就是它被覆盖的原因。你每次都是tb“tb=new TextBlock()”的新实例,这就是它被覆盖的原因。哇,太棒了!我以前没想过。真的,谢谢!哇,太棒了!我以前没想过。真的,谢谢!