快顯功能表概觀
Popup 控制項提供一種以個別視窗顯示內容的方式,該視窗會漂浮在目前應用程式視窗上方,相對於所指定元素或畫面座標的位置。 本主題介紹 Popup 控制項,並提供其使用的資訊。
什麼是快顯?
Popup 控制項會以在相對於畫面上元素或點位置的個別視窗來顯示內容。 當 Popup 為可見時,IsOpen 屬性會設定為 true
。
注意
Popup 不會在滑鼠指標移至其父物件上時自動開啟。 如果您想要讓 Popup 自動開啟,請使用 ToolTip 或 ToolTipService 類別。 如需詳細資訊,請參閱 ToolTip 概觀。
建立快顯
下列範例顯示如何定義 Popup 控制項包含一個 ToggleButton 控制項的子項目。 由於 ToggleButton
只能有一個子項目,本範例會將 ToggleButton
和 Popup
控制項的文字放在 StackPanel 中。
Popup
的內容會顯示在位於相關 ToggleButton
控制項附近應用程式視窗的個別視窗中。
<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 控制項建置在其他控制項之內。 下列控制項會實作特定用途的 Popup 控制項:
ToolTip. 如果您想要為項目建立工具提示,請使用 ToolTip 和 ToolTipService 類別。 如需詳細資訊,請參閱 ToolTip 概觀。
ContextMenu. 如果您想要為項目建立捷徑功能表,請使用 ContextMenu 控制項。 如需詳細資訊,請參閱 ContextMenu 概觀。
Expander. 如果您想要建立會顯示標頭的控制項,其中該標頭具有會顯示內容的可摺疊區域,請使用 Expander 控制項。 如需詳細資訊,請參閱 Expander 概觀。
快顯行為和外觀
Popup 控制項提供可讓您自訂其行為和外觀的功能。 例如,您可以設定開啟和關閉行為、動畫、不透明度和點陣圖效果,以及 Popup 大小和位置。
開啟和關閉行為
當 Popup 屬性設定為 IsOpen 時,true
控制項會顯示其內容。 根據預設,Popup 會保持開啟狀態,直到 IsOpen 屬性設定為 false
為止。 不過,您可以藉由將 StaysOpen 屬性設為 false
來變更預設。 當您將此屬性設定為 false
時,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上設定點陣圖效果。
快顯大小
根據預設,Popup 會自動調整為其內容的大小。 當發生自動調整大小行為時,可能會隱藏部分點陣圖效果,因為為 Popup 內容定義的預設畫面區域大小所提供的空間不足,無法顯示那些點陣圖效果。
當您在內容上設定 Popup 時,也可以遮蔽 RenderTransform 內容。 在此案例中,如果轉換 Popup 的內容超出原始 Popup 的區域,某些內容可能會隱藏。 如果點陣圖效果或轉換需要較多的空間,您可以定義 Popup 內容周圍的邊界,來為控制項提供更大的區域。
定義快顯位置
您可以設定 PlacementTarget、PlacementRectangle、Placement、HorizontalOffset 和 VerticalOffsetProperty 屬性來安置彈出視窗。 如需詳細資訊,請參閱快顯放置行為。 當 Popup 顯示在畫面上時,它並不會因為其父系位置重新調整,而跟著重新調整其位置。
自訂快顯位置
您可以藉由指定一組相對於您想要 Popup 顯示之 PlacementTarget 的座標,來自定義 Popup 控制項的位置。
若要自訂刊登位置,請將 Placement 屬性設定為 Custom。 然後定義 CustomPopupPlacementCallback 委派,其傳回一組 Popup可能的放置點與主軸 (以偏好順序)。 顯示 Popup 已自動選取最大部分的點。 如需範例,請參閱指定自訂快顯位置。
快顯和視覺化樹狀結構
Popup 控制項沒有自己的視覺化樹狀結構;當呼叫 MeasureOverride 的 Popup 方法時,它會傳回 0 (零) 的大小。 不過,當您將 IsOpen 的 Popup 屬性設定為 true
時,就會建立具其本身可視覺化樹狀結構的新視窗。 新視窗包含 Child 的 Popup 內容。 新視窗的寬度和高度不可超過畫面寬度或高度的 75%。
Popup 控件項會以邏輯子項目的形式維護其 Child 內容的參考。 建立新視窗時,Popup 的內容會變成視窗的視覺效果子視窗,並保留 Popup 的邏輯子項目。 相反地,Popup 仍然是其 Child 內容的邏輯父代。