我正在努力解决何时或如何激活/使MoveAdorner可见。
我尝试以下但没有成功:在要装饰的元素中,我在GotFocus事件中添加了Adorner。仅此一点是不够的,所以我添加了对InvalidateVisual()的调用。但没有任何反应。有没有人暗示如何让这些装饰品可见?
protected void MyUIElement_GotFocus( object sender, RoutedEventArgs e )
{
AdornerLayer layer = AdornerLayer.GetAdornerLayer( this );
layer.Add( new MoveAdorner( this ) );
layer.InvalidateVisual( );
}
对于澄清:装饰元素是一个位于自定义ItemsControl的派生面板内的Control。
MoveAdorner
派生自Adorner
,只需在控件的顶部和底部绘制两个Box。
亲切的问候
答案 0 :(得分:0)
事实上,Got / Lost Focus事件对于这种情况并不是很好。想象一下,您想要显示可以获得焦点的其他输入控件。
现在我已经连接到LeftButtonUpEvent并隐藏所有其他Adorners并且只显示当前元素的Adorner。
此外,还会根据要求添加装饰器。此方法在Control中定义为“装饰”。
private void ShowAdorner( ) {
Owner.HideAppointmentAdorners( );
AdornerLayer layer = AdornerLayer.GetAdornerLayer( this );
Adorner []adorners = layer.GetAdorners( this );
if( adorners == null || adorners.Length == 0 )
{
layer.Add( new ResizingAdorner( this ) { Visibility = System.Windows.Visibility.Visible } );
}
else
{
for( int i = 0; i < adorners.Length; i++ )
{
adorners [ i ].Visibility = System.Windows.Visibility.Visible;
}
}
}