2011-07-11 87 views
3

我有一個定義的控件模板,稱爲myVal,用於驗證 - 然後將其用於樣式定位文本框中,其中Validation.ErrorTemplate設置爲 WPF - adorner在視圖轉換後保持原始位置

現在說有很多這樣的文本框坐在視圖中,並且這使用TranslateTransform和BeginAnimation滑動。

結果是ErrorTemplate中使用的裝飾器並不像視圖過渡那樣跟隨文本框的位置 - 而是保持在起始位置。然而,只要我設置焦點或諸如鼠標移動之類的事件,裝飾者就可以正確地重新定位文本框。

如何讓裝飾者在轉換後在正確的位置展示而不必改變焦點?是否有延遲驗證的方式,直到過渡之後......或者如何在動畫完成後「重新驗證」屬性?我讀了一些關於調用invalidatevisual的地方,但看不到我會怎麼做。任何幫助深表感謝。

乾杯

回答

3

兩個想法:

嘗試添加AdornerDecorator周圍的文本框,或文本框組左右。這將告訴WPF爲折磨裝飾者添加另一個圖層。向文本框添加一個「更近」的圖層可能會有所幫助。

如果你想告訴裝飾器層重新渲染本身,那麼你可以使用類似下面的代碼:

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

喜森,感謝您的回覆,不勝感激。我嘗試在文本框周圍包裝一個AdornerDecorator,並且我實際上是圍繞一個組合框進行了嘗試,但是我猜測它對於文本框是一樣的,並且沒有任何運氣。裝飾者仍然出現在他們原來的位置。這就是我要寫的內容,直到仔細觀察並意識到它確實解決了問題(我只是將它應用到滿屏的屏幕中的一個屏幕上,而未找到我已更改的屏幕)。要明確,解決方案的工作非常好。謝謝你的幫助彌敦道! – c95mbq

+0

太棒了!很高興聽到它的工作! – NathanAW