C# 编辑TextBlock时出现InvalidOperationException。OnTextChanged内部的内联线已更改
在下面的代码中,我随机遇到了InvalidOperationException,有什么好方法可以修复它C# 编辑TextBlock时出现InvalidOperationException。OnTextChanged内部的内联线已更改,c#,wpf,C#,Wpf,在下面的代码中,我随机遇到了InvalidOperationException,有什么好方法可以修复它 public class ParsedTextBlock : TextBlock { static ParsedTextBlock() { TextProperty.OverrideMetadata(typeof(ParsedTextBlock), new FrameworkPropertyMetadata("No Text Set",
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”标志消除了堆栈溢出问题。如果已经在处理更改,我将跳过更改通知上的处理。不确定是否有更好的方法,但我仍然遇到了这个例外。