WPF - 视图切换后装饰器停留在原始位置

3
我有一个控件模板定义,称之为myVal,用于验证 - 例如在针对文本框的样式中使用其Validation.ErrorTemplate属性。现在假设有许多这样的文本框位于视图中,并且使用TranslateTransform和BeginAnimation进行幻灯片式切换。结果是ErrorTemplate中使用的装饰品不随着视图转换而跟随文本框的位置 - 相反,它们保留在起始位置。但是,只要我设置焦点或诸如鼠标移动之类的事件,装饰品就会自动正确地重新定位到文本框。如何在变换后使装饰品显示在正确的位置,而无需更改焦点?是否有一种方法可以延迟验证直到过渡之后...或者动画完成后如何“重新验证”属性?我在某个地方读到了调用invalidatevisual的方法,但看不出该如何实现。非常感谢您的帮助。
1个回答

3

两个想法:

尝试在文本框周围或文本框组周围添加AdornerDecorator。这将告诉WPF添加另一层用于渲染装饰器。添加一个“更接近”文本框的层可能会有所帮助。

如果您想要告诉装饰器层重新呈现自己,则可以使用以下代码:

var al = AdornerLayer.GetAdornerLayer(myTextBox);
al.Update();

嗨Nathan,谢谢你的回复,非常感谢。我尝试在文本框周围包装一个AdornerDecorator,实际上我尝试了在ComboBox周围包装,但我猜文本框也是一样的,但没有成功。装饰仍然出现在它们最初的位置。直到仔细查看并意识到它确实解决了问题,我才打算写下这些话(我只将其应用于屏幕上的一个项目,并未找到我已更改的那个项目)。只是为了明确,这个解决方案运行得非常好。感谢你的帮助 Nathan! - c95mbq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接