C# 编辑TextBlock时出现InvalidOperationException。OnTextChanged内部的内联线已更改

C# 编辑TextBlock时出现InvalidOperationException。OnTextChanged内部的内联线已更改,c#,wpf,C#,Wpf,在下面的代码中,我随机遇到了InvalidOperationException,有什么好方法可以修复它 public class ParsedTextBlock : TextBlock { static ParsedTextBlock() { TextProperty.OverrideMetadata(typeof(ParsedTextBlock), new FrameworkPropertyMetadata("No Text Set",

在下面的代码中,我随机遇到了InvalidOperationException,有什么好方法可以修复它

public class ParsedTextBlock : TextBlock
{
    static ParsedTextBlock() {
        TextProperty.OverrideMetadata(typeof(ParsedTextBlock),
            new FrameworkPropertyMetadata("No Text Set",
                FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender,
                OnTextChanged)
            );
    }

    private static void OnTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        ParsedTextBlock control = (ParsedTextBlock)obj;
        control.Inlines.Clear();
        control.Inlines.Add(new Run("test " + args.NewValue as string))
    }
}

我不认为在文本更改事件中更改文本是个好主意。这将导致事件递归触发,并最终生成堆栈溢出。。。
多么讽刺:)

更改的文本是针对容器控件的,它正在更改子控件的文本,而不是它本身。不用介意,我明白你的意思,你可能是对的。我在做类似的事情时碰到了同样的异常。我通过添加一个布尔“processing”标志消除了堆栈溢出问题。如果已经在处理更改,我将跳过更改通知上的处理。不确定是否有更好的方法,但我仍然遇到了这个例外。