我正在尝试创建一个“调试”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
有谁知道我做错了什么?或者有更好的方法来做类似的事情吗?
答案 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;
}