当前位置:  开发笔记 > 编程语言 > 正文

在Silverlight/WPF中使元素向前(Z索引)

如何解决《在Silverlight/WPF中使元素向前(Z索引)》经验,为你挑选了2个好方法。

我在网上找到的用于设置Z-Index以在Silverlight中引入元素的所有文档和示例都使用Canvas元素作为容器.

我的项目是DataTemplate中ItemsControl容器内的Border元素.我正在使用MouseEnter和MouseLeave事件在ScaleTransform.ScaleX和ScaleTransform.ScaleY上触发动画,以便它们在悬停时生长.由于它们已调整大小并占据与容器中其他项目相同的空间,因此最近添加的项目与旧项目重叠(与当前调整大小的项目相对).有没有一种清洁方法可以将当前项目转发到我触发动画的代码中,以便它们在调整大小时重叠所有其他项目?



1> 小智..:

我不得不处理这件事.

假设您有一个ItemsControl,其中ItemTemplate设置为自定义控件的实例.在该控件中,您可以执行Canvas.SetZIndex(this,99).它不起作用,因为"this"不是ItemsControl的ItemsPanel的直接子节点.ItemsControl为每个项目创建一个ContentPresenter,将其放入ItemsPanel,并在ContentPresenter中呈现ItemTemplate.

因此,如果要在控件中更改ZIndex,则必须找到其ContentPresenter,并更改其上的ZIndex.一种方法是......

        public static T FindVisualParent( this DependencyObject obj )
        where T : DependencyObject
    {
        DependencyObject parent = VisualTreeHelper.GetParent( obj );
        while ( parent != null )
        {
            T typed = parent as T;
            if ( typed != null )
            {
                return typed;
            }
            parent = VisualTreeHelper.GetParent( parent );
        }
        return null;
    }
                ContentPresenter foo = this.FindVisualParent();
            Canvas.SetZIndex( foo, 99 );



2> Robert Macne..:

在WPF中,您可以在触发器中设置Panel.ZIndex属性:


    
        
            Green
            Red
            Blue
            Orange
            Yellow
            Violet
        
        
            
                
                    
                
                
                    
                
                
                    
                
                
                    
                        
                            
                               
                               
                            
                        
                    
                    
                        
                            
                               
                               
                            
                        
                  
                
            
        
    
    
    
        
            
                
            
        
    

StyleContentPresenter我们设置Panel.ZIndex到99999的时候IsMouseOvertrue.它必须在ContentPresenter而不是Border因为ContentPresenters是ItemsControl小组的孩子.

不幸的是,我不认为这个属性做了它对Silverlight的还...


很好的回答 - 这对我帮助很大.
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有