快顯視窗

這個 Popup 控制項提供一種方式,可以在一個獨立的視窗中顯示內容,該視窗會浮動在目前應用程式視窗上,相對於指定元素或螢幕座標。

相對於其父代物件 Popup 定位的 Button 控制項如下圖所示:

彈出視窗控制項相對於按鈕控制項。

下表列出了使用彈出視窗控制項的常見任務:

Title Description
為彈出式視窗添加動畫效果 學習如何用分鏡和動畫來製作彈出視窗動畫。
彈出視窗的放置行為 了解不同的擺放模式,以及如何將彈出視窗相對於元素或螢幕座標定位。
指定自訂彈出視窗位置 學習如何定義自訂擺放邏輯以實現精確的彈出式定位。

什麼是彈出視窗?

Popup控制項會在相對於螢幕上的元素或點的獨立視窗中顯示內容。 當 Popup 是可見時,屬性 IsOpen 被設定為 true。

備註

當滑鼠指標移到父物件上時,A Popup 不會自動開啟。 如果你想讓Popup自動開啟,就使用ToolTip或ToolTipService類別。 更多資訊請參閱 工具提示。

建立彈出視窗

以下範例將 Popup 控制定義為控制項的 ToggleButton 子元素。 由於 a ToggleButton 只能有一個子元素,本範例將 的ToggleButtonPopup文字與控制項置於 StackPanel。 彈出視窗的 IsOpen 屬性會利用資料綁定來與按鈕 IsChecked 的屬性同步。 當你選擇按鈕時,彈出視窗會自動開啟或關閉。 內容會顯示在一個獨立視窗中,該視窗會浮在應用程式視窗上,靠近按鈕的位置。

<ToggleButton x:Name="TogglePopupButton" Height="30" Width="150" HorizontalAlignment="Left">
    <StackPanel>
        <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">
            <Run Text="Is button toggled? " />
            <Run Text="{Binding IsChecked, ElementName=TogglePopupButton}" />
        </TextBlock>

        <Popup Name="myPopup" IsOpen="{Binding IsChecked, ElementName=TogglePopupButton}">
            <Border BorderThickness="1">
                <TextBlock Name="myPopupText" Background="LightBlue" Foreground="Blue" Padding="30">
                Popup Text
                </TextBlock>
            </Border>
        </Popup>
    </StackPanel>
</ToggleButton>

實作彈出視窗的控制項

你可以把Popup 控制項嵌入到其他控制項中。 以下控制項為特定用途實作彈出視窗:

  • ToolTip。 當使用者滑鼠移至或聚焦某個元素時,會用彈出視窗顯示上下文說明。 更多資訊請參閱 工具提示。

  • ContextMenu。 通常在使用者右鍵點擊時,會彈出一個彈出視窗來顯示元素的指令選項。 更多資訊請參閱 上下文選單。

  • ComboBox。 使用快顯視窗來顯示或隱藏可選項目的下拉式清單。 更多資訊請參閱 ComboBox。

樣式和模板

控制 Popup 項提供 XAML 的樣式屬性,你可以用來自訂它的外觀。 這個控制項不會定義預設的範本,包含範本部分或視覺狀態,但你可以自訂它的行為。 欲了解更多資訊,請參閱 彈出行為與外觀 章節。

內容屬性

此控制會將 Child 屬性用作其內容屬性。 該 Child 屬性代表彈出視窗顯示的單一子元素。

組件

這個控制項並沒有定義任何範本部分。

視覺狀態

這個控制並不定義任何視覺狀態。

控制 Popup 項提供功能,讓你能自訂它的行為與外觀。 例如,你可以設定開啟與關閉行為、動畫、不透明度與點陣圖效果,以及 Popup 大小與位置。

開放與閉合行為

當屬性Popup設定為 IsOpen時,true控制項會顯示其內容。 預設情況下, Popup 在屬性 IsOpen 設定為 false之前 會保持開啟狀態。 不過,你可以透過將屬性設定 StaysOpen 為 false來改變預設行為。 當你將這個屬性設為 false時, Popup 內容視窗就會有滑鼠擷取功能。 當Popup的滑鼠事件發生在Popup視窗外時,這個Popup視窗會失去滑鼠捕捉,然後關閉。

當Opened內容視窗開啟或關閉時,Closed和Popup事件會被觸發。

動畫

控制項 Popup 內建了對通常與淡入和滑入等行為相關的動畫的支援。 你可以透過將 PopupAnimation 屬性設定為 PopupAnimation 列舉值,來開啟這些動畫。 若要讓 Popup 動畫正常運作,您必須將 AllowsTransparency 屬性設定為 true。

你也可以將動畫案例如Storyboard應用到Popup控制項。

不透明度與點陣圖效果

Opacity控制項的Popup性質不影響其內容。 預設情況下, Popup 內容視窗是不透明的。 要建立透明 Popup物件,將屬性設 AllowsTransparency 為 true。

一個Popup的內容不會繼承像DropShadowBitmapEffect這樣的點陣圖效果,即便你是直接在Popup控制項或父視窗中的任何其他元素上設定的。 要讓點陣圖效果出現在 Popup的內容上,你必須直接將點陣效果設定在其內容上。 例如,若Popup的子節點是StackPanel,則在StackPanel上設定點陣效應。

預設情況下,a Popup 會自動調整大小以適應其內容。 當自動調整大小時,某些點陣圖效果可能會被隱藏,因為為 Popup 內容定義的預設螢幕區域大小不足以顯示這些點陣圖效果。

Popup 當你在內容上設定 A RenderTransform 時,內容也可能被遮蔽。 在這種情況下,如果變形者 Popup 的內容超出原始 Popup範圍,部分內容可能會被隱藏。 如果點陣圖效果或變換需要更多空間,你可以在內容周圍 Popup 設定邊界,為控制項留出更多空間。

定義彈出位置

你可以透過設定 PlacementTarget、 PlacementRectangle、 Placement、 HorizontalOffset和 VerticalOffsetProperty 屬性來定位彈出視窗。 更多資訊,請參閱 彈出式元件的擺放行為。 當你在螢幕上顯示Popup時,如果其父節點被重新定位,它不會自行重新定位。

自訂彈出視窗位置

你可以透過指定一組相對於Popup的座標,來自訂PlacementTarget的顯示位置,以控制Popup的位置。

要自訂擺放位置,請將屬性設 Placement 為 Custom。 接著定義一個CustomPopupPlacementCallback委派,回傳一組針對Popup的可能放置點和主軸(依照偏好順序)。 顯示最大部分 Popup 的點會自動被選中。 舉例請參見 「指定自訂彈出視窗位置」。

Popup控制項沒有自己的視覺樹。 當你呼叫該 MeasureOverride 方法時,它會回傳大小為 0(0)。 然而,當你將屬性設 IsOpen 為 true時,控制項會建立一個帶有自身視覺樹的新視窗。 新的視窗包含 Child中Popup的內容。 新視窗的寬度和高度不能超過螢幕寬度或高度的75%。

Popup控制項以邏輯子節點的形式維持對其Child內容的參考。 當控制項建立新視窗時,Popup 的內容成為視窗的視覺子節點,同時保持為 Popup 的邏輯子節點。 相反地,Popup 仍然是其 Child 內容的邏輯母體。

另請參閱