Açılan Pencere Yerleştirme Davranışı
Bir Popup Denetim, içeriği bir uygulama üzerinde gezinen ayrı bir pencerede görüntüler. ,,, PopupPlacementTargetPlacementPlacementRectangleHorizontalOffset Ve VerticalOffset özelliklerini kullanarak bir denetim, fare veya ekran için göreli konumunu belirtebilirsiniz. Bu özellikler birlikte çalışarak, konumunu belirtirken esneklik sağlar Popup .
Not
ToolTipVe ContextMenu sınıfları bu beş özelliği de tanımlar ve benzer şekilde davranır.
Açılan pencereyi konumlandırma
Öğesinin yerleşimi Popup bir UIElement veya ekranın tamamına göre olabilir. Aşağıdaki örnek PopupUIElement , bir resim olan (Bu örnekte bir görüntü) ile ilgili dört denetimi oluşturur. Tüm Popup denetimlerin PlacementTarget özelliği olarak ayarlanmış image1 , ancak her biri Popup yerleştirme özelliği için farklı bir değere sahip.
<Canvas Width="200" Height="150">
<Image Name="image1"
Canvas.Left="75"
Source="Water_lilies.jpg" Height="200" Width="200"/>
<Popup IsOpen="True" PlacementTarget="{Binding ElementName=image1}"
Placement="Bottom">
<TextBlock FontSize="14" Background="LightGreen">Placement=Bottom</TextBlock>
</Popup>
<Popup IsOpen="True" PlacementTarget="{Binding ElementName=image1}"
Placement="Top">
<TextBlock FontSize="14" Background="LightGreen">Placement=Top</TextBlock>
</Popup>
<Popup IsOpen="True" PlacementTarget="{Binding ElementName=image1}"
Placement="Left">
<TextBlock FontSize="14" Background="LightGreen">Placement=Left</TextBlock>
</Popup>
<Popup IsOpen="True" PlacementTarget="{Binding ElementName=image1}"
Placement="Right">
<TextBlock FontSize="14" Background="LightGreen">Placement=Right</TextBlock>
</Popup>
</Canvas>
Aşağıdaki çizimde resim ve Popup denetimler gösterilmektedir

Bu basit örnek, ve özelliklerinin nasıl ayarlanacağını PlacementTarget gösterir Placement , ancak PlacementRectangle ,, HorizontalOffset ve özelliklerini kullanarak VerticalOffset nerede konumlandığını daha da fazla kontrol edersiniz Popup .
Koşulların tanımları: bir açılan pencerenin Anatomumu
Aşağıdaki terimler,,,, PlacementTargetPlacementPlacementRectangleHorizontalOffset ve VerticalOffset özelliklerinin birbirleriyle ve ile ilişkisini anlamak için yararlıdır Popup :
Hedef nesne
Hedef alan
Hedef kaynak
Açılan pencere hizalama noktası
Bu terimler, ve ile ilişkili olduğu denetimin çeşitli yönlerini belirtmek için kullanışlı bir yol sağlar Popup .
Hedef nesne
Hedef nesne , ilişkili olduğu öğesidir . PlacementTargetÖzellik ayarlandıysa, hedef nesneyi belirtir. PlacementTargetAyarlanmamışsa ve Popup bir üst öğesi varsa, üst öğe hedef nesnedir. Hiçbir PlacementTarget değer yoksa ve üst öğe yoksa, hedef nesne yoktur ve Popup ekrana göre konumlandırılır.
Aşağıdaki örnek, Popup öğesinin alt öğesi olan bir oluşturur Canvas . Örnek PlacementTarget , üzerinde özelliğini yapmaz Popup . İçin varsayılan değer, Placement Bu PlacementMode.Bottom nedenle Popup altında görünür Canvas .
<Canvas Margin="5" Background="Red" Width="200" Height="150" >
<Ellipse Canvas.Top="60" Canvas.Left="50"
Height="85" Width="60"
Fill="Black"/>
<Popup IsOpen="True" >
<TextBlock Background="LightBlue" FontSize="18">This is a Popup</TextBlock>
</Popup>
</Canvas>
Aşağıdaki çizim, ' Popup nin öğesine göre konumlandırıldığını gösterir Canvas .

Aşağıdaki örnek, Popup öğesinin alt öğesi olan bir oluşturur, Canvas ancak bu kez PlacementTarget olarak ayarlandığında, ellipse1 açılan pencerenin altında görünür Ellipse .
<Canvas Margin="5" Background="Red" Width="200" Height="150" >
<Ellipse Name="ellipse1"
Canvas.Top="60" Canvas.Left="50"
Height="85" Width="60"
Fill="Black"/>
<Popup IsOpen="True" PlacementTarget="{Binding ElementName=ellipse1}">
<TextBlock Background="LightBlue" FontSize="18">This is a Popup</TextBlock>
</Popup>
</Canvas>
Aşağıdaki çizim, ' Popup nin öğesine göre konumlandırıldığını gösterir Ellipse .

Not
İçin ToolTip , varsayılan değeri PlacementMouse . İçin ContextMenu , varsayılan değeri PlacementMousePoint . Bu değerler daha sonra, "özellikler birlikte nasıl çalışır." bölümünde açıklanmaktadır.
Hedef alan
Hedef alan , ekranda göreli olarak görüntülenen alandır. Önceki örneklerde,, Popup hedef nesnenin sınırlarına hizalanır, ancak bazı durumlarda, PopupPopup bir hedef nesnesine sahip olsa bile diğer sınırlara hizalanır. PlacementRectangleÖzellik ayarlandıysa, hedef alan hedef nesnenin limitinden farklıdır.
Aşağıdaki örnek Canvas , her biri ve içeren iki nesne oluşturur RectanglePopup . Her iki durumda da için hedef nesnesi Popup olur Canvas . Popupİçindeki içindeki içinde,,, CanvasPlacementRectangleXYWidth ve Height özellikleri sırasıyla 50, 50, 50 ve 100 olarak ayarlanmış olarak ayarlanmıştır. Popupİkinci öğesinde, CanvasPlacementRectangle kümesi yoktur. Sonuç olarak, ilki Popup altına yerleştirilir PlacementRectangle ve ikincisi Popup altına yerleştirilir Canvas . Her biri, CanvasRectangle ilki için aynı sınırlara sahip bir içerir PlacementRectanglePopup . PlacementRectangleUygulamasının uygulamada görünür bir öğe oluşturmadığını unutmayın; örnek öğesini Rectangle temsil edecek şekilde oluşturur PlacementRectangle .
<StackPanel Orientation="Horizontal" Margin="50,50,0,0">
<Canvas Width="200" Height="200" Background="Red">
<Rectangle Canvas.Top="50" Canvas.Left="50"
Width="50" Height="100"
Stroke="White" StrokeThickness="3"/>
<Popup IsOpen="True" PlacementRectangle="50,50,50,100">
<TextBlock FontSize="14" Background="Yellow"
Width="140" TextWrapping="Wrap">
This is a popup with a PlacementRectangle.
</TextBlock>
</Popup>
</Canvas>
<Canvas Width="200" Height="200" Background="Red" Margin="30,0,0,0">
<Rectangle Canvas.Top="50" Canvas.Left="50"
Width="50" Height="100"
Stroke="White" StrokeThickness="3"/>
<Popup IsOpen="True">
<TextBlock FontSize="14" Background="Yellow"
Width="140" TextWrapping="Wrap">
This is a popup without a PlacementRectangle.
</TextBlock>
</Popup>
</Canvas>
</StackPanel>
Aşağıdaki çizimde, önceki örneğin sonucu gösterilmektedir.

Hedef kaynak ve açılan hizalama noktası
Hedef kaynak ve açılan pencere hizalama noktası , konumlandırma için kullanılan, sırasıyla hedef alandaki ve açılan pencerede bulunan başvuru noktalarıdır. HorizontalOffsetVerticalOffset Açılan menüyü hedef alandan kaydırmak için ve özelliklerini kullanabilirsiniz. HorizontalOffsetVe, VerticalOffset hedef kaynağa ve açılan hizalama noktasına göre değişir. Özelliğin değeri, Placement hedef kaynak ve açılan hizalama noktasının nerede olduğunu belirler.
Aşağıdaki örnek bir oluşturur Popup ve HorizontalOffset ve VerticalOffset özelliklerini 20 olarak ayarlar. PlacementÖzelliği olarak ayarlanır Bottom (varsayılan), bu nedenle hedef kaynak hedef alanın sol alt köşesidir ve açılan hizalama noktası, öğesinin sol üst köşesindedir Popup .
<Canvas Width="200" Height="200" Background="Yellow" Margin="20">
<Popup IsOpen="True" Placement="Bottom"
HorizontalOffset="20" VerticalOffset="20">
<TextBlock FontSize="14" Background="#42F3FD">
This is a popup.
</TextBlock>
</Popup>
</Canvas>
Aşağıdaki çizimde, önceki örneğin sonucu gösterilmektedir.

Özelliklerin birlikte çalışması
, Ve değerlerinin PlacementTargetPlacementRectanglePlacement doğru hedef alanı, hedef kaynağı ve açılan hizalama noktasını anlamak için birlikte değerlendirilmesi gerekir. Örneğin, değeri Placement ise Mouse , hedef nesne yoktur, yok PlacementRectangle sayılır ve hedef alan fare işaretçisinin sınırları olur. Diğer taraftan, Placement ise, BottomPlacementTarget veya üst öğesi hedef nesneyi belirler ve PlacementRectangle hedef alanı belirler.
Aşağıdaki tabloda hedef nesne, hedef alanı, hedef kaynağı ve açılır hizalama noktası açıklanmakta ve PlacementTargetPlacementRectangle her bir numaralandırma değeri için ve kullanılıp kullanılmayacağını gösterir PlacementMode .
| PlacementMode | Hedef nesne | Hedef alan | Hedef kaynak | Açılan pencere hizalama noktası |
|---|---|---|---|---|
| Absolute | Geçerli değildir. PlacementTarget yoksayılır. | Ekran veya PlacementRectangle ayarlanmış ise. , PlacementRectangle Ekrana göredir. | Hedef alanın sol üst köşesi. | Öğesinin sol üst köşesi Popup . |
| AbsolutePoint | Geçerli değildir. PlacementTarget yoksayılır. | Ekran veya PlacementRectangle ayarlanmış ise. , PlacementRectangle Ekrana göredir. | Hedef alanın sol üst köşesi. | Öğesinin sol üst köşesi Popup . |
| Bottom | PlacementTarget ya da üst. | Hedef nesne veya PlacementRectangle ayarlandıysa. , PlacementRectangle Hedef nesnesine görelidir. | Hedef alanın sol alt köşesi. | Öğesinin sol üst köşesi Popup . |
| Center | PlacementTarget ya da üst. | Hedef nesne veya PlacementRectangle ayarlandıysa. , PlacementRectangle Hedef nesnesine görelidir. | Hedef alanın merkezi. | Merkezinin merkezi Popup . |
| Custom | PlacementTarget ya da üst. | Hedef nesne veya PlacementRectangle ayarlandıysa. , PlacementRectangle Hedef nesnesine görelidir. | Tarafından tanımlanır CustomPopupPlacementCallback . | Tarafından tanımlanır CustomPopupPlacementCallback . |
| Left | PlacementTarget ya da üst. | Hedef nesne veya PlacementRectangle ayarlandıysa. , PlacementRectangle Hedef nesnesine görelidir. | Hedef alanın sol üst köşesi. | Öğesinin sağ üst köşesi Popup . |
| Mouse | Geçerli değildir. PlacementTarget yoksayılır. | Fare işaretçisinin sınırları. PlacementRectangle yoksayılır. | Hedef alanı sol alt köşesi. | 'nin sol üst Popup köşesi. |
| MousePoint | Geçerli değildir. PlacementTarget yoksayılır. | Fare işaretçisinin sınırları. PlacementRectangle yoksayılır. | Hedef alan sol üst köşesi. | 'nin sol üst Popup köşesi. |
| Relative | PlacementTarget veya üst öğe. | Hedef nesne veya PlacementRectangle ayarlanmışsa. PlacementRectangle, hedef nesnesine göredir. | Hedef alan sol üst köşesi. | 'nin sol üst Popup köşesi. |
| RelativePoint | PlacementTarget veya üst öğe. | Hedef nesne veya PlacementRectangle ayarlanmışsa. PlacementRectangle, hedef nesnesine göredir. | Hedef alan sol üst köşesi. | 'nin sol üst Popup köşesi. |
| Right | PlacementTarget veya üst öğe. | Hedef nesne veya PlacementRectangle ayarlanmışsa. PlacementRectangle, hedef nesnesine göredir. | Hedef alan sağ üst köşesi. | 'nin sol üst Popup köşesi. |
| Top | PlacementTarget veya üst öğe. | Hedef nesne veya PlacementRectangle ayarlanmışsa. PlacementRectangle, hedef nesnesine göredir. | Hedef alan sol üst köşesi. | 'nin sol alt Popup köşesi. |
Aşağıdaki çizimlerde her değer Popup için , hedef alanı, hedef kaynak ve açılan hizalama noktası PlacementMode gösterilmiştir. Her şekilde hedef alan sarı, Popup mavidir.









Açılan Pencere Ekranın Kenarıyla Karşılaştığında
Güvenlik nedeniyle, Popup bir ekranın kenarı tarafından gizlenemez. Ekran kenarıyla karşılaştığında aşağıdaki Popup üç durumdan biri gerçekleşir:
Açılan pencere, ekran kenarında kendisini karartacak şekilde yeniden Popup hizalar.
Açılan pencere farklı bir açılır pencere hizalama noktası kullanır.
Açılan pencerede farklı bir hedef çıkış noktası ve açılan pencere hizalama noktası lar.
Bu seçenekler bu bölümün ilerleyen kısımlarında daha ayrıntılı olarak açıklanmıştır.
Ekran kenarıyla karşılaştığında davranışı, özelliğin değerine ve açılan pencerenin PopupPlacement hangi ekran kenarıyla karşılaştığına bağlıdır. Aşağıdaki tabloda, her değer için bir Popup ekran kenarıyla karşılaşan davranış PlacementMode özetlenmiştir.
| PlacementMode | Üst kenar | Alt kenar | Sol kenar | Sağ kenar |
|---|---|---|---|---|
| Absolute | Üst kenarla hizalanır. | Alt kenarla hizalanır. | Sol kenarla hizalanır. | Sağ kenarla hizalanır. |
| AbsolutePoint | Üst kenarla hizalanır. | Açılan hizalama noktası, 'nin sol alt köşesine Popup değişir. | Sol kenarla hizalanır. | Açılan hizalama noktası, 'nin sağ üst köşesine Popup değişir. |
| Bottom | Üst kenarla hizalanır. | Hedef kaynak, hedef alanı sol üst köşesine, açılan hizalama noktası ise 'nin sol alt köşesine Popup değişir. | Sol kenarla hizalanır. | Sağ kenarla hizalanır. |
| Center | Üst kenarla hizalanır. | Alt kenarla hizalanır. | Sol kenarla hizalanır. | Sağ kenarla hizalanır. |
| Left | Üst kenarla hizalanır. | Alt kenarla hizalanır. | Hedef kaynak, hedef alanı sağ üst köşesine, açılan hizalama noktası ise 'nin sol üst köşesine Popup değişir. | Sağ kenarla hizalanır. |
| Mouse | Üst kenarla hizalanır. | Hedef kaynak, hedef alanı (fare işaretçisinin sınırları) sol üst köşesine, açılan hizalama noktası ise 'nin sol alt köşesine Popup dönüşür. | Sol kenarla hizalanır. | Sağ kenarla hizalanır. |
| MousePoint | Üst kenarla hizalanır. | Açılan hizalama noktası, 'nin sol alt köşesine Popup değişir. | Sol kenarla hizalanır. | Açılan hizalama noktası, açılan pencerenin sağ üst köşesine değişir. |
| Relative | Üst kenarla hizalanır. | Alt kenarla hizalanır. | Sol kenarla hizalanır. | Sağ kenarla hizalanır. |
| RelativePoint | Üst kenarla hizalanır. | Açılan hizalama noktası, 'nin sol alt köşesine Popup değişir. | Sol kenarla hizalanır. | Açılan hizalama noktası, açılan pencerenin sağ üst köşesine değişir. |
| Right | Üst kenarla hizalanır. | Alt kenarla hizalanır. | Sol kenarla hizalanır. | Hedef kaynak, hedef alanı sol üst köşesine, açılan hizalama noktası ise 'nin sağ üst köşesine Popup değişir. |
| Top | Hedef kaynak, hedef alanı sol alt köşesine, açılan hizalama noktası ise 'nin sol üst köşesine Popup değişir. Aslında bu, olduğunda ile PlacementBottom aynıdır. | Alt kenarla hizalanır. | Sol kenarla hizalanır. | Sağ kenarla hizalanır. |
Ekran Kenarına Hizalama
, Popup ekranın tamamının görünür olduğu şekilde kendisini yeniden konumlandırarak ekranın Popup kenarına hizalanır. Bu durum oluştuğunda, hedef çıkış noktası ile açılan hizalama noktası arasındaki uzaklık ve değerleri arasında farklılık HorizontalOffsetVerticalOffset gösterebilir. , PlacementAbsolute veya CenterRelative olduğunda, kendisini Popup her ekran kenarıyla hizalar. Örneğin , olarak ve olarak PopupPlacementRelativeVerticalOffset 100 olarak ayarlanmış olduğunu varsayalım. Ekranın alt kenarı, ekranın tüm veya bir kısmını gizlerse, ekranın alt kenarı boyunca kendisini yeniden konumlandırarak hedef çıkış noktası ile açılan hizalama noktası arasındaki dikey mesafe PopupPopup 100'den küçük olur. Aşağıdaki çizimde bunu gösterilmiştir.

Açılan Hizalama Noktasını Değiştirme
, veya ise, açılan pencere alt veya sağ ekran kenarıyla karşılaştığında açılır PlacementAbsolutePoint pencere hizalama noktası RelativePointMousePoint değişir.
Aşağıdaki çizimde, alt ekran kenarının tüm veya bir kısmını gizlerken açılan hizalama noktasının sol alt Popup köşesi olduğu Popup gösterilir.

Aşağıdaki çizimde, sağ ekran kenarı tarafından gizlenen açılan hizalama noktasının sağ Popup üst köşesi olduğu Popup gösterilmiştir.

, Popup alt ve sağ ekran kenarlarıyla karşılaşırsa açılan hizalama noktası, 'nin sağ alt köşesidir. Popup
Hedef Kaynak ve Açılan Hizalama Noktasını Değiştirme
, , , veya olduğunda, belirli bir ekran kenarıyla karşılaşıldıklarında hedef kaynak Placement ve açılan hizalama noktası BottomLeftMouseRightTop değişir. Konumun değişmesini neden olan ekran kenarı değerine PlacementMode bağlıdır.
Aşağıdaki çizimde, olduğunda ve alt ekran kenarıyla karşılaştığında hedef çıkış noktasının hedef alanı sol üst köşesi, açılır pencere hizalama noktasının ise sol alt köşesi olduğu PlacementBottomPopupPopup gösterilmiştir.

Aşağıdaki çizimde, olduğunda ve sol ekran kenarıyla karşılaştığında hedef çıkış noktasının hedef alanı sağ üst köşesi, açılır pencere hizalama noktasının ise sol üst köşesi olduğu PlacementLeftPopupPopup gösterilmiştir.

Aşağıdaki çizimde, olduğunda ve sağ ekran kenarıyla karşılaştığında hedef çıkış noktasının hedef alanı sol üst köşesi, açılır pencere hizalama noktasının ise sağ üst PlacementRight köşesi olduğu PopupPopup gösterilmiştir.

Aşağıdaki çizimde, olduğunda ve üst ekran kenarıyla karşılaştığında hedef çıkış noktasının hedef alanı sol alt köşesi, açılır pencere hizalama noktasının ise sol üst köşesi olduğu PlacementTopPopupPopup gösterilmiştir.

Aşağıdaki çizimde, olduğunda ve alt ekran kenarıyla karşılaştığında hedef çıkış noktasının hedef alanı (fare işaretçisinin sınırları) sol üst köşesi ve açılır pencere hizalama noktasının sol alt köşesi olduğu PlacementMousePopupPopup gösterilmiştir.

Açılan Pencere Yerleşimini Özelleştirme
özelliğini olarak ayarerek hedef çıkış noktasını ve açılan hizalama noktasını PlacementCustom özelleştirebilirsiniz. Ardından, için bir dizi olası yerleştirme noktası ve birincil CustomPopupPlacementCallback eksen (tercih sırasına göre) döndüren bir temsilci Popup tanımlayın. değerinin en büyük kısmını gösteren Popup nokta seçilir. ekranın kenarı Popup tarafından gizlenirse Popup konumu otomatik olarak ayarlanır. Bir örnek için, bkz. Specify a Custom Popup Position.