我完全被这个困扰了。
以下是设置:
具有标准运行和段落的RichTextBox。当用户选择一些文本,点击热键时,我用从InlineUIContainer派生的自定义控件替换所选文本 - 让我们称之为CustomContainer。
CustomContainer有一个TextBlock类型的子项。 TextBlock的TextProperty绑定到属性更改的对象。
这样做是为了无法编辑此属性的文本 - 如果选择它或尝试删除它,它将删除整个块而不是任何字符。
这一切都很美妙。
问题在于:
单击“保存”时,我们将获取整个RichTextBox数据,对其进行序列化,并将其保存到文本文件中。然后,当您重新打开文件时,所有绑定都会根据需要重新连接,并且所有内容都应该如此。
直到被绑定的属性发生变化。
此时CustomContainer不会更改。请记住,CustomContainer具有绑定了Text属性的TextBlock。如果我查看有问题的TextBlock,我可以看到Text属性已更改 - 然而,在视觉上没有任何变化。我尝试过各种各样的事情来刷新容器,但似乎没有任何效果。我已经尝试过UpdateLayout,我尝试过改变绑定,但没有什么可以解决的。
如果我从RichTextBox中删除那个CustomContainer,然后突出显示并点击热键,一切正常。所以代码和绑定工作。在RichTextBox的反序列化,重新绑定和更新的某个地方,属性的更改停止工作的绘制......
更新:我已经成功实现了它,但我认为它有点像黑客。如果有人能为我提供真正的解决方案,我会保持开放状态。
我所做的是在加载时删除自定义控件,并从头开始创建一个新的并在同一位置插入。这是诀窍,虽然我很困惑为什么(它只是调用构造函数,删除旧的并添加新的。带有绑定的其余代码都是一样的,所以我仍然困惑为什么这会起作用 - 或者更确切地说,为什么另一种方式不起作用)