【问题标题】:WPF - adorner stays in original position after view transitionsWPF - 视图转换后装饰器保持在原始位置
【发布时间】:2011-07-11 22:39:58
【问题描述】:

我定义了一个控制模板,称为 myVal,用于验证 - 例如,它用于样式定位文本框中,其中其 Validation.ErrorTemplate 设置为

现在说有许多这样的文本框位于视图中,并且使用 TranslateTransform 和 BeginAnimation 滑动。

结果是,ErrorTemplate 中使用的装饰器在视图转换时没有跟随文本框的位置 - 而是停留在起始位置。但是,一旦我设置焦点或鼠标移动等事件,装饰器就会根据文本框正确地重新定位自己。

如何在不改变焦点的情况下让装饰器在转换后显示在正确的位置?有没有办法将验证延迟到过渡之后......或者动画完成后如何“重新验证”属性?我在某处读到了有关调用 invalidatevisual 的信息,但不知道该怎么做。非常感谢任何帮助。

干杯

【问题讨论】:

    标签: wpf position transition adorner


    【解决方案1】:

    两个想法:

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

    如果你想告诉装饰层重新渲染自己,那么你可以使用类似下面的代码:

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

    【讨论】:

    • 嗨内森,感谢您的回复,非常感谢。我尝试将 AdornerDecorator 包裹在文本框周围,实际上我在组合框周围进行了尝试,但我猜文本框也是如此,并且没有任何运气。装饰物仍然出现在原来的位置。这就是我要写的内容,直到仔细观察并意识到它确实解决了问题(我只将它应用到一个满是项目的屏幕中,并且找不到我更改的那个)。需要明确的是,该解决方案效果很好。感谢您对内森的所有帮助!
    猜你喜欢
    • 2010-11-24
    • 2018-02-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多