【WPF】关于Popup控件的小记

在wpf开发中,常需要在鼠标位置处弹出一个“提示框”(在此就以“提示框”代替吧),通过“提示框”进行信息提示或者数据操作,如果仅仅是提示作用,使用ToolTip控件已经足够,但是有些是需要在弹出的框中有操作数据的功能,如弹出框包含一棵树或者列表,此时ToolTip就没法实现了,因为ToolTip只能起到显示的作用,也许有人会有弹出对话框的形式,这是一种办法,但是要让对话框总是显示在鼠标的位置,并且对话框的大小需要根据显示内容的改变(如树或列表的展开与收缩)而动态改变的话,实现起来会比较麻烦。通过进一步的探讨,原来使用Popup控件是那么的简单和实用,它在许多方面和ToolTip 控件一样,也是单一内容,但是它可以包含任何WPF元素,该内容存储在Popup.Child属性中,而不像ToolTip控件存储在ToolTip.Content属性中。另外,和ToolTip控件一样Popup控件也可以延伸出窗口的边界,可以使用IsOpen属性显示或隐藏Popup控件。跟ToolTip相比,Popup会有以下几个比较重要的特点:

(1)ToolTip可以自动显示,而Popup控件永远不会自动显示,为了显示Popup控件必须设置IsOpen属性。

(2)ToolTip可以自动消失,但是Popup有点不同的就是,在默认情况下,Popup.StaysOen属性被设置为True,并且Popup控件会一直显示,直到显式地将IsOpen属性设置为False。如果将Popup.StaysOpen属性设置为False,当用户在其他地方单击鼠标时,Popup控件就会消失。

(3)如果Popup控件的IsOpen属性设置为True时,可以通过Popup控件的PopupAnimation属性设置弹出方式,Placement属性设置弹出位置,如Placement="Mouse",表示在鼠标位置处弹出“提示框”

(4)Popup控件不和任何控件相关联,无论在哪定义Popup标签都可以。

案例效果:

描述一下问题:就是从上到下滑动,显示经过滑动的弹框,滑动到下一个时,上一个就自动消失了(已完成)。现在是想进入到弹框里面点击里面的东西。因为我设置了移开触发区域就弹框消失。现在我不知道怎么判定一下,让它离开触发区域,往右移,进入到弹框时,弹框不消失。

两种解决方式:

1.判断坐标点是否在控件范围内:

2.用定时器来解决:

引用下命名空间就行了

WPF中Popup的几个问题



下面是解决popup弹框置顶的问题:

在程序写一个popup发现他会在置顶,在网上找了两大神代码,就使用他的代码

http://www.cnblogs.com/Leaco/p/3164394.html

http://blog.csdn.net/baijinwen/article/details/6159043

只需要把下面的类放到自己的软件,然后把使用 popup 替换为 CCPopup 就不会让popup置顶


public class CCPopup : Popup

    {

        public static DependencyProperty TopmostProperty = Window.TopmostProperty.AddOwner(typeof(CCPopup), new FrameworkPropertyMetadata(false, OnTopmostChanged));

        public bool Topmost

        {

            get { return (bool)GetValue(TopmostProperty); }

            set { SetValue(TopmostProperty, value); }

        }

        private static void OnTopmostChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)

        {

            (obj as CCPopup).UpdateWindow();

        }

        protected override void OnOpened(EventArgs e)

        {

            UpdateWindow();

        }

        private void UpdateWindow()

        {

            var hwnd = ((HwndSource)PresentationSource.FromVisual(this.Child)).Handle;

            RECT rect;

            if (GetWindowRect(hwnd, out rect))

            {

                SetWindowPos(hwnd, Topmost ? -1 : -2, rect.Left, rect.Top, (int)this.Width, (int)this.Height, 0);

            }

        }

        #region P/Invoke imports & definitions

        [StructLayout(LayoutKind.Sequential)]

        public struct RECT        {

            public int Left;

            public int Top;

            public int Right;

            public int Bottom;

        }

        [DllImport("user32.dll")]

        [return: MarshalAs(UnmanagedType.Bool)]

        private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

        [DllImport("user32", EntryPoint = "SetWindowPos")]

        private static extern int SetWindowPos(IntPtr hWnd, int hwndInsertAfter, int x, int y, int cx, int cy, int wFlags);

        #endregion

    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容