关于WPF中Popup控件的小记

摘要:
另外,和ToolTip控件一样Popup控件也可以延伸出窗口的边界,可以使用IsOpen属性显示或隐藏Popup控件。跟ToolTip相比,Popup会有以下几个比较重要的特点:ToolTip可以自动显示,而Popup控件永远不会自动显示,为了显示Popup控件必须设置IsOpen属性。如果将Popup.StaysOpen属性设置为False,当用户在其他地方单击鼠标时,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标签都可以。

部分XAML代码:

<TextBox Name="my_text" Grid.Row="0" Grid.Column="3" IsReadOnly="True" HorizontalAlignment="Left" Margin="4,0,0,0" />
<Button Grid.Row="0" Grid.Column="3" Content="..." HorizontalAlignment="Right" Margin="0,0,10,0" Click="Button_Click" />
<Popup Name="popup" AllowsTransparency="True" FlowDirection="LeftToRight"
PopupAnimation="Fade" Placement="Mouse" StaysOpen="False">
<Border Background="Transparent">
<!--定义边框-->
<StackPanel>

<!--local:ControlCheckPointTree为自定义控件树-->
<local:ControlCheckPointTree x:Name="myTree" IsShowCheck="True" onSelectedItemChanged="ControlCheckPointTree_onSelectedItemChanged" MouseLeave="ControlCheckPointTree_MouseLeave"/>
</StackPanel>
</Border>
</Popup>

后台代码:

private void Button_Click(object sender, RoutedEventArgs e)

{

popup.IsOpen = true;

}

private void ControlCheckPointTree_onSelectedItemChanged(object sender, EventArgs e)

{

my_text.Text = "";

foreach (string str in myTree.SelectedItemNames)

{

my_text.Text += str;

}

}

private void ControlCheckPointTree_MouseLeave(object sender, MouseEventArgs e)

{

popup.IsOpen = false;

}

免责声明:文章转载自《关于WPF中Popup控件的小记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇深度剖析OpenGL ES中的多线程和多窗口渲染技术CSPNet下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wpf学习笔记更新数据源

此示例基于wpf学习笔记-指定数据源1.让对象实现INotifyPropertyChanged接口,以便属性更改发出通知 {publicPerson(){}publicPerson(stringname,intage){this.name=name;this.age=age;}stringname;publicstringName{get{returnth...

[转]WPF焦点概述

WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点。 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素。 本概述将详细介绍这些概念。 理解这些概念之间的区别对于创建具有可以获取焦点的多个区域的复杂应用程序是非常重要的。 参与焦点管理的主要类有 Keyboard 类、FocusManager 类以及基元素类(如 UIElement...

WPF-带有GridView的ListView样式

ListView是展示数据的常用控件,这里简单对带有GridView的ListView样式进行设置。 <Style TargetType="{x:Type ListViewItem}"> <Style.Triggers> <Trigger Property="IsSel...

WPF通过深拷贝实现保存与取消

用old保存就设置,用new保存新设置确认逻辑 public void SaveCurrent() { //创建一个新对象(深拷贝) oldConfig = CopyEx.DeepCopyByBin(config); } 取消逻辑 public voi...

WPF学习笔记二 WPF命中测试

概述: WPF中的Canvas是常用的一个绘图控件,可以方便地在Canvas中添加我们需要处理的各种元素如:图片、文字等。但Canvas中元素增加到一定数量,并且有重合的时候,我们如何通过在Canvas中点击鼠标,获得我们想要的元素,然后再对该元素做出相应的控制? 命中测试,可以很好地解决这个问题 本文目的: 使用命中测试,选取Canvas中相应Ele...

WPF中内嵌网页的两种方式

在wpf程序中,有时会内嵌网页。内嵌网页有两种方法,一种是使用wpf自带WebBrowser控件来调用IE内核,另一种是使用CefSharp包来调用chrom内核。 一、第一种使用自带WebBrowser: 1、直接在界面XAML文件中添加如下代码 1 <Grid> 2 <Grid.RowDefinitions> 3...