3

我完全被这个难住了。

这是设置:

具有标准运行和段落的 RichTextBox。当用户选择一些文本,点击热键时,我将所选文本替换为从 InlineUIContainer 派生的自定义控件 - 我们称之为 CustomContainer。

CustomContainer 有一个 TextBlock 类型的子项。TextBlock 的 TextProperty 绑定到属性更改的对象。

这样做是为了无法编辑此属性的文本 - 如果您选择它或尝试删除它,它会删除整个块而不是任何字符。

所有这一切都很好。

这是问题所在:

当您单击保存时,我们会获取整个 RichTextBox 数据,对其进行序列化,然后将其保存到文本文件中。然后,当您重新打开文件时,所有绑定都会根据需要重新连接,并且一切看起来都应该如此。

直到绑定的属性改变。

此时 CustomContainer 没有改变。请记住,CustomContainer 有一个 TextBlock 绑定了 Text 属性。如果我查看有问题的 TextBlock,我可以看到 Text 属性已更改 -但是,视觉上没有任何更改。我尝试做各种事情来刷新容器,但似乎没有任何效果。我尝试过 UpdateLayout,我尝试过更改绑定,但没有任何效果。

如果我从 RichTextBox 中删除该 CustomContainer,然后突出显示并点击热键,一切正常。所以代码和绑定有效。在 RichTextBox 的反序列化、重新绑定和更新的某个地方,属性的绘制在其更改时停止工作......

更新:我已经设法让它工作,虽然我认为它有点像黑客。我将保持开放,以防有人可以为我提供真正的解决方案。

我所做的是删除加载时的自定义控件,并从头开始创建一个新控件并插入到同一位置。这就是诀窍,尽管我对为什么感到困惑(它只是调用构造函数,删除旧的并添加新的。具有绑定的其余代码都是一样的,所以我仍然困惑为什么这会起作用 - 或者更确切地说,为什么其他方式不起作用)

4

0 回答 0