zoukankan      html  css  js  c++  java
  • WP&Win10仿微信消息框代码分享

    上次分享了幸运转盘的源码,感觉小伙伴们很喜欢;这次和大家分享下通信相关部分需要用到的类似微信的消息框代码,有需要的童鞋可以拿去用哟。自己尝试写的,可能有点low,勿喷呀!

    希望以后有好的东西大家都分享下,相互学习,感兴趣的童鞋欢迎加入我的Win10开发者群:53078485,共同探讨!

    下面是仿微信消息框实现思路+核心代码:

    思路
    1.用 Polygon绘制对话框。
    2.通过遍历可视化树获取ListView子项目的Polygon属性。
    3.获取Textblock的Size。由于Textblock的Size是不固定的,可以通过在Textblock的SizeChange方法获得Size。

    代码

    //FindVisiualChild可以遍历可视化树,获取对应需要的属性。

    private ChildType FindVisualChild<ChildType>(DependencyObject obj) where ChildType : DependencyObject
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                    //Debug.WriteLine(child.GetType().ToString());
                    if (child != null && child is ChildType)
                    {
                        return child as ChildType;
                    }
                    else
                    {
                        ChildType childOfChildren = FindVisualChild<ChildType>(child);
                        if (childOfChildren != null)
                        {
                            return childOfChildren;
                        }
                    }
                }
                return null;
    
            }



    //通过TextBlock的SizeChange事件,获取TextBlock的Size,并用Polygon绘制对话框。

    private void TextBlock_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                //获取子项目下的polygon属性。
                Polygon p = FindVisualChild<Polygon>((sender as TextBlock).Parent);
    
                p.Points.Clear();
                if ((sender as TextBlock).HorizontalAlignment == HorizontalAlignment.Left)
                {
                    p.Points.Add(new Point(0, 15));
                    p.Points.Add(new Point(5, 10));
                    p.Points.Add(new Point(5, 0));
                    p.Points.Add(new Point(15 + e.NewSize.Width, 0));
                    p.Points.Add(new Point(15 + e.NewSize.Width, 20 + e.NewSize.Height));
                    p.Points.Add(new Point(5, 20 + e.NewSize.Height));
                    p.Points.Add(new Point(5, 20));
                    p.Fill = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255));
                }
                else
                {
                    p.Points.Add(new Point(5, 0));
                    p.Points.Add(new Point(15 + e.NewSize.Width, 0));
                    p.Points.Add(new Point(15 + e.NewSize.Width, 10));
                    p.Points.Add(new Point(20 + e.NewSize.Width, 15));
                    p.Points.Add(new Point(15 + e.NewSize.Width, 20));
                    p.Points.Add(new Point(15 + e.NewSize.Width, 20 + e.NewSize.Height));
                    p.Points.Add(new Point(5, 20 + e.NewSize.Height));
                    p.Fill = new SolidColorBrush(Color.FromArgb(255, 81, 186, 35));
                }
            }
        }



    Demo分享地址:http://pan.baidu.com/s/1i3KVEp3


    运行结果:

  • 相关阅读:
    维护
    zabbix监控线
    java——快排、冒泡、希尔、归并
    java——注解处理器
    spring boot——常用注解
    java——修改txt文件中某一行的内容
    spring boot——关于一个Mysql主键的问题
    mysql
    springboot
    自信点,不要怕
  • 原文地址:https://www.cnblogs.com/clever-he/p/4709985.html
Copyright © 2011-2022 走看看