c# wpf控件被覆盖问题

这算是个碰上的入门级的问题,但我当时选人的时候拿去做为最最最简单测试题,居然有些人连思路都没有,真的是让我服气。

首先,说一下场景,相信都看过QQ或者是TIM登录界面,输入这个地方是两个控件,自定义的combox和textbox,而且很清晰可以看见,每个控件的border都是1px,鼠标放在任意一个上面,border都会变色。那么问题来了,既然这两个控件的border都是完整会变色的,那么两个控件的border一定有重合区域,但控件一定是有先后绘制的,只能一个盖在另外一个上面。那这是如何实现的呢?


其实对GUI有点认识的人都知道,既然绘制有先后,只需动态改变其Z序,就能将控件置前,使其动态的一个覆盖在另一个上面。在WPF中,子控件的绘制顺序是在父控件中的相对顺序决定的,那么问题就迎刃而解了。

 public static void Bring(Control element)
        {
            if (element == null) return;


            Grid parent = element.Parent as Grid;
            if (parent == null) return;


            var maxZ = parent.Children.OfType<UIElement>()
                .Where(x => x != element)
                .Select(x => Canvas.GetZIndex(x))
                .Max();
            Canvas.SetZIndex(element, maxZ + 1);
        }

        public static void Back(Control element)
        {
            if (element == null) return;


            Grid parent = element.Parent as Grid;
            if (parent == null) return;


            Canvas.SetZIndex(element, 0);
        }


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值