WPF中的Popup控制元件

ccx_john發表於2013-12-03

Popup控制元件在許多方面和ToolTip 控制元件一樣,儘管它們之間沒有繼承的關係。和ToolTip一樣Popup控制元件也只能包含單一內容,但是它可以包含任何WPF元素,該內容儲存在Popup.Child屬性中,而不像ToolTip控制元件儲存在ToolTip.Content屬性中。另外,和ToolTip控制元件一件Popup控制元件也可以延伸出視窗的邊界,最後,可以使用相同的佈局屬性放置Popup控制元件,並使用相同的IsOpen屬性顯示或隱藏Popup控制元件。

Popup控制元件和ToolTip控制元件之間的區別非常重要,這些區別包括:

1.Popup控制元件永遠不會自動顯示,為了顯示Popup控制元件必須設定IsOpen屬性。

2.預設情況下,Popup.StaysOen屬性被設定為True,並且Popup控制元件會一直顯示,直到顯式地將IsOpen屬性設定為False。如果將Popup.StaysOpen屬性設定為False,當使用者在其他地方單擊滑鼠時,Popup控制元件就會消失。

如果Popup控制元件的IsOpen屬性設定為True時,通過Popup控制元件的PopupAnimation屬性可以設定Popup控制元件的顯示方式。

由於Popup控制元件不和任何控制元件相關聯,所以無論在哪定義Popup標籤都無所謂。

XAML示例程式碼如下。

<Window x:Class="WpfApplication2.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <Button Click="Button_Click">
            Button
        </Button>
        <Popup Name="P" AllowsTransparency="True" 
               PopupAnimation="Fade" Placement="Mouse"><!--定義Popup設定其彈出方式和彈出位置並設定其允許透明-->
            <Border Background="Transparent"><!--定義邊框-->
                <StackPanel>
                    <Button>1111111</Button>
                    <Image Source="./Resource/c.png"></Image>
                    <Button Click="Button_Click_1">2222222</Button>
                </StackPanel>
            </Border>
        </Popup>
    </StackPanel>
</Window>

CS示例程式碼如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;

namespace WpfApplication2
{
    /// <summary>
    /// Window1.xaml 的互動邏輯
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            P.IsOpen = true;
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            ((Popup)(((Border)(((StackPanel)(((Button)sender).Parent)).Parent)).Parent)).IsOpen = false;
            e.Handled = true;
        }
    }
}

相關文章