WPF中文网

Popup弹出窗口

Popup类似于ToolTip,在指定的元素或窗体中弹出一个具有任意内容的窗口。Popup继承于FrameworkElement,算得上是独门独户的控件,因为大多数控件都是从Shape、Control或Panel三个类继承而来。

public class Popup : FrameworkElement, IAddChild
{
    public static readonly DependencyProperty ChildProperty;
    public static readonly DependencyProperty IsOpenProperty;
    public static readonly DependencyProperty PlacementProperty;
    public static readonly DependencyProperty CustomPopupPlacementCallbackProperty;
    public static readonly DependencyProperty StaysOpenProperty;
    public static readonly DependencyProperty HorizontalOffsetProperty;
    public static readonly DependencyProperty VerticalOffsetProperty;
    public static readonly DependencyProperty PlacementTargetProperty;
    public static readonly DependencyProperty PlacementRectangleProperty;
    public static readonly DependencyProperty PopupAnimationProperty;
    public static readonly DependencyProperty AllowsTransparencyProperty;
    public static readonly DependencyProperty HasDropShadowProperty;

    public Popup();

    public bool HasDropShadow { get; }
    public bool AllowsTransparency { get; set; }
    public PopupAnimation PopupAnimation { get; set; }
    public Rect PlacementRectangle { get; set; }
    public UIElement PlacementTarget { get; set; }
    public double VerticalOffset { get; set; }
    public double HorizontalOffset { get; set; }
    public bool StaysOpen { get; set; }
    public UIElement Child { get; set; }
    public bool IsOpen { get; set; }
    public PlacementMode Placement { get; set; }
    public CustomPopupPlacementCallback CustomPopupPlacementCallback { get; set; }
    protected internal override IEnumerator LogicalChildren { get; }

    public event EventHandler Closed;
    public event EventHandler Opened;

    public static void CreateRootPopup(Popup popup, UIElement child);
    protected override Size MeasureOverride(Size availableSize);
    protected virtual void OnClosed(EventArgs e);
    protected virtual void OnOpened(EventArgs e);
    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e);
    protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e);
    protected override void OnPreviewMouseRightButtonDown(MouseButtonEventArgs e);
    protected override void OnPreviewMouseRightButtonUp(MouseButtonEventArgs e);
    protected internal override DependencyObject GetUIParentCore();

}

属性成员

属性名称说明
HasDropShadow 只读属性,控件是否有投影效果。
AllowsTransparency获取或设置控件是否包含透明内容。
PopupAnimation获取或设置控件打开或关闭时的动画效果,None表示没有动画,Fade表示逐渐显示或淡出,Slide表示向上向下滑入,Scroll表示滚动效果。
PlacementRectangle获取或设置控件打开时的矩形位置 。
PlacementTarget获取或设置Popup控件在哪个控件身边打开(重点)。
VerticalOffset获取或设置目标原点和 popup 对齐点之间的垂直距离。
HorizontalOffset获取或设置目标原点和弹出项对齐之间的水平距离点。
StaysOpen默认值为true,表示Popup打开后,如果失去焦点,Popup是否继续显示(重点)。
Child获取或设置控件的内容,类似于ContentControl的Content属性,只能拥有一个元素(重点)。
IsOpen获取或设置Popup控件是否可见。
Placement枚举类,表示Popup 控件显示时的对齐方式。

事件成员

Opened事件:Popup控件打开时引发的事件。

Closed事件:Popup控件关闭时引发的事件

<Window x:Class="HelloWorld.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:HelloWorld"
        mc:Ignorable="d" FontSize="16"
        Title="WPF中文网之控件课程 - www.wpfsoft.com" Height="350" Width="500">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <CheckBox x:Name="checkbox" Content="WPF中文网" Height="30" Margin="5" ToolTip="WPF中文网之控件课程"/>
        <Popup Name="myPopup" 
               IsOpen="{Binding IsChecked, ElementName=checkbox}" 
               PlacementTarget="{Binding ElementName=checkbox}" 
               StaysOpen="True">
            <Border BorderThickness="1" Background="LightBlue">
                <StackPanel>
                    <TextBlock Text="官方网站" FontWeight="Bold" />
                    <TextBlock Text="点击这个按钮,进入WPF中文网站"/>
                    <Border BorderBrush="Silver" BorderThickness="0,1,0,0" Margin="0,4"/>
                    <TextBlock Text="http://www.wpfsoft.com" FontStyle="Italic"/>
                </StackPanel>
            </Border>
        </Popup>
    </StackPanel>
</Window>

代码分析

我们分别实例化了名叫checkbox和myPopup控件,myPopup的IsOpen属性绑定了checkbox的IsChecked,意思是, 当用户点击checkbox时,checkbox的IsChecked属性为true,myPopup的IsOpen属性也为true,于是就可以显示myPopup的内容了。

同时,myPopup的PlacementTarget属性也绑定到了checkbox控件,意味着myPopup将显示在checkbox控件身边,至于具体位置,可以设置Placement属性,有兴趣的小伙伴可以去尝试一下。

这里我们用到了Binding这个类,可以把它看成是一座桥梁,我们会在后面专门详细讲解Binding的用法。

当前课程源码下载:(注明:本站所有源代码请按标题搜索)

文件名:026-《Popup弹出窗口》-源代码
链接:https://pan.baidu.com/s/1yu-q4tUtl0poLVgmcMfgBA
提取码:wpff

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1