在我正在构建的用户界面中,每当面板中的控件获得焦点时,我希望装饰该面板。因此,我处理了
我的问题是,如果装饰元素的边界发生更改,则装饰器不会重新渲染。例如,在这个简单的情况下:
IsKeyboardFocusWithinChanged
事件,并在元素获得焦点时添加装饰器,并在失去焦点时移除装饰器。这似乎运行良好。我的问题是,如果装饰元素的边界发生更改,则装饰器不会重新渲染。例如,在这个简单的情况下:
<WrapPanel Orientation="Horizontal"
IsKeyboardFocusChanged="Panel_IsKeyboardFocusChanged">
<Label>Caption</Label>
<TextBox>Data</TextBox>
</WrapPanel>
当TextBox
获得焦点时,装饰器可以正确地装饰WrapPanel
的边界,但是当我输入文本时,TextBox
会在装饰器边缘下方扩展。当然,只要我做任何强制装饰器重新渲染的操作,例如ALT-TAB退出应用程序或给另一个面板焦点,它就会自动纠正。但是当被装饰元素的边界发生变化时,如何让它重新呈现?
Adorner
基构造函数的UIElement
不在装饰层内。例如,如果您使用AdornerDecorator
创建本地装饰层,然后错误地引用了超出该视觉/逻辑树的UIElement
。 - Dennis