快顯功能表概觀
Popup 控制項提供一種方式,在目前視窗上浮動的另一個視窗 (座標相對於指定項目或螢幕座標) 中顯示內容。 本主題將介紹 Popup 控制項,並提供其用途的相關資訊。
這個主題包含下列章節。
- 什麼是快顯功能表
- 建立快顯功能表
- 會實作快顯功能表的控制項
- 快顯功能表的行為與外觀
- 定義快顯功能表位置
- 快顯功能表與視覺化樹狀目錄
- 相關主題
什麼是快顯功能表
快顯功能表是一個 Popup 控制項,可在座標相對於螢幕上某項目或某點的另一個視窗中顯示內容。 當 Popup 可見時,IsOpen 屬性是設為 true。
![]() |
---|
Popup 不會在滑鼠指標移至其父物件上時自動開啟。若要讓 Popup 自動開啟,請使用 ToolTip 或 ToolTipService 類別。如需詳細資訊,請參閱 工具提示概觀。 |
建立快顯功能表
下列範例顯示如何定義屬於 Button 控制項之子項目的 Popup 控制項。 由於 Button 只能有一個子項目,因此這個範例會將 Button 與 Popup 控制項的文字放在 StackPanel 中。 Popup 的內容會出現在 TextBlock 控制項中,這個控制項會將文字顯示在另一個視窗中,而這個視窗會在應用程式視窗上相關 Button 控制項的附近浮動。
<Button HorizontalAlignment="Left" Click="DisplayPopup"
Width="150" Margin="20,10,0,0">
<StackPanel>
<TextBlock>Display Your Popup Text</TextBlock>
<Popup Name="myPopup">
<TextBlock Name="myPopupText"
Background="LightBlue"
Foreground="Blue">
Popup Text
</TextBlock>
</Popup>
</StackPanel>
</Button>
<Button Name="ButtonForPopup" HorizontalAlignment="Left"
Click="CreatePopup"
Width="150" Margin="20,10,0,0">
<StackPanel Name="aStackPanel">
<TextBlock>Create Popup</TextBlock>
</StackPanel>
</Button>
會實作快顯功能表的控制項
您可以將 Popup 控制項建到其他控制項中。 下列控制項可以實作特定用途的 Popup 控制項:
ToolTip. 若要建立某個項目的工具提示,請使用 ToolTip 與 ToolTipService 類別。 如需詳細資訊,請參閱 工具提示概觀。
ContextMenu. 若要建立某個項目的內容功能表,請使用 ContextMenu 控制項。 如需詳細資訊,請參閱 ContextMenu 概觀。
Expander. 若要建立會顯示標題 (具有會顯示內容的可摺疊式區域) 的控制項,請使用 Expander 控制項。 如需詳細資訊,請參閱 Expander 概觀。
快顯功能表的行為與外觀
Popup 控制項提供讓您自訂其行為與外觀的功能。 例如,您可以設定開啟與關閉行為、動畫、不透明度與點陣圖效果,以及 Popup 大小與位置。
開啟與關閉行為
當 IsOpen 屬性設為 true 時,Popup 控制項會顯示其內容。 根據預設,Popup 在 IsOpen 屬性設為 false 之前,都會維持在開啟狀態。 但您可以藉由將 StaysOpen 屬性設為 false 來變更這個預設行為。 當您將這個屬性設為 false 時,Popup 內容視窗會具有滑鼠捕捉 (Mouse Capture)。 當滑鼠事件發生於 Popup 視窗外時,Popup 即會失去滑鼠捕捉,且視窗會關閉。
當開啟或關閉 Popup 內容視窗時,會引發 Opened 與 Closed 事件。
動畫
Popup 控制項對於一般與淡入與滑入等行為相關聯的動畫,具有內建的支援。 您可以將 PopupAnimation 屬性設為 PopupAnimation 列舉值,以開啟這些動畫。 若要讓 Popup 動畫正確運作,您必須將 AllowsTransparency 屬性設為 true。
您也可以將 Storyboard 之類的動畫套用至 Popup 控制項。
透明度與點陣圖效果
Popup 控制項的 Opacity 屬性對其內容沒有任何作用。 根據預設,Popup 內容視窗為不透明。 若要建立透明的 Popup,請將 AllowsTransparency 屬性設為 true。
Popup 內容不會繼承您直接對父視窗中的 Popup 控制項或任何其他項目所設定的點陣圖效果,例如 DropShadowBitmapEffect。 若要讓 Popup 內容顯示點陣圖效果,您必須直接對其內容設定點陣圖效果。 例如,如果 Popup 的子系為 StackPanel,請對 StackPanel 設定點陣圖效果。
快顯功能表大小
根據預設,Popup 會自動隨其內容調整大小。 當自動調整大小時,有些點陣圖效果可能會被隱藏,因為定義給 Popup 內容的預設螢幕區域大小並未提供足夠的空間來顯示點陣圖效果。
當您對內容設定 RenderTransform 時,Popup 內容也可能變得不清楚。 在此情況下,如果轉換後的 Popup 內容超出原始 Popup 的區域,即可能隱藏部分內容。 如果點陣圖效果或轉換需要更多空間,您可以定義 Popup 內容周圍的邊界,為控制項提供更多空間。
定義快顯功能表位置
您可以設定 PlacementTarget、PlacementRectangle、Placement、HorizontalOffset 和 VerticalOffsetProperty 屬性,以放置快顯功能表。 如需詳細資訊,請參閱 快顯功能表放置行為。 當 Popup 顯示在螢幕上時,如果它的父項目已經重新調整位置的話,它就不會重新調整位置。
自訂快顯功能表位置
您可以根據要顯示 Popup 的 PlacementTarget 指定一組相對的座標,以自訂 Popup 控制項的位置。
若要自訂位置,請將 Placement 屬性設為 Custom。 接著,請定義 CustomPopupPlacementCallback 委派,使其傳回 Popup 的一組可能位置點與主座標軸 (依照優先順序)。 系統會自動選取能夠顯示最多 Popup 部分的點。 如需範例,請參閱 HOW TO:指定自訂 Popup 的位置。
快顯功能表與視覺化樹狀目錄
Popup 控制項沒有自己的視覺化樹狀目錄,而是會在呼叫 Popup 的 MeasureOverride 方法時傳回大小 0 (零)。 不過,當您將 Popup 的 IsOpen 屬性設為 true 時,卻會建立擁有自己的視覺化樹狀目錄的新視窗。 這個新視窗包含 Popup 的 Child 內容。 新視窗的寬度與高度不可超過螢幕寬度或高度的 75%。
Popup 控制項會以邏輯子系的形式維護其 Child 內容的參考。 建立新視窗時,Popup 的內容會成為該視窗的視覺化子系,同時仍是 Popup 的邏輯子系。 相對地,Popup 仍是其 Child 內容的邏輯父代 (Parent)。