Aracılığıyla paylaş


Açılır Pencere Yerleştirme Davranışı

Popup denetimi, içeriği bir uygulamanın üzerinde kayan ayrı bir pencerede görüntüler. Popup, PlacementTarget, Placement, PlacementRectangleve HorizontalOffset özelliklerini kullanarak bir VerticalOffset denetime, fareye veya ekrana göre konumunu belirtebilirsiniz. Bu özellikler birlikte çalışarak Popupkonumunu belirtme esnekliği sağlar.

Uyarı

ToolTip ve ContextMenu sınıfları da bu beş özelliği tanımlar ve benzer şekilde davranır.

Açılan Menü'leri Konumlandırma

Bir Popup yerleşimi, bir UIElement'e veya ekranın tamamına göre olabilir. Aşağıdaki örnek, bir Popup'e göre dört adet UIElement denetimi (bu durumda bir görüntü) oluşturur. Tüm Popup denetimlerinin PlacementTarget özelliği image1olarak ayarlanmıştır, ancak her Popup yerleştirme özelliği için farklı bir değere sahiptir.

<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 görüntü ve Popup denetimleri gösterilmektedir

Dört açılır pencere denetimi

Bu basit örnek, PlacementTarget ve Placement özelliklerinin nasıl ayarlandığını gösterir, ancak PlacementRectangle, HorizontalOffsetve VerticalOffset özelliklerini kullanarak, Popup nerede konumlandırıldığı üzerinde daha fazla denetim sahibi olursunuz.

![UYARI] El tercihi ile ilgili Windows ayarlarınıza bağlı olarak, açılır pencere üstte veya altta gösterildiğinde sola veya sağa hizalanmış olabilir. Önceki görüntü, sağ el uyumunu gösterir ve bu, açılır pencerenin sola yerleşmesini sağlar.

Terimlerin Tanımları: Açılır Pencere Anatomisi

Aşağıdaki terimler, PlacementTarget, Placement, PlacementRectangle, HorizontalOffsetve VerticalOffset özelliklerinin birbiriyle ve Popupile nasıl ilişkili olduğunu anlamak için yararlıdır:

  • Hedef nesne

  • Hedef alan

  • Hedef kaynak

  • Açılan hizalama noktası

Bu terimler, Popup ve ilişkili olduğu denetimin çeşitli yönlerine başvurmak için kullanışlı bir yol sağlar.

Hedef Nesne

hedef nesne, Popup ilişkili olduğu öğedir. PlacementTarget özelliği ayarlanırsa hedef nesneyi belirtir. PlacementTarget ayarlanmadıysa ve Popup bir üst öğesi varsa, üst öğe hedef nesnedir. Eğer PlacementTarget değeri ve üst öğe yoksa, hedeflenen nesne bulunmaz ve Popup, ekrana göre konumlandırılır.

Aşağıdaki örnek, bir Popupalt öğesi olan bir Canvas oluşturur. Örnek, PlacementTargetüzerinde Popup özelliğini ayarlamaz. Placement için varsayılan değer PlacementMode.Bottomolduğundan, PopupCanvasaltında görünür.

<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 çizimde, PopupCanvasgöre konumlandırılmış olduğu gösterilmektedir.

PlacementTarget olmadan açılan pencere denetimi.

Aşağıdaki örnek, bir Popupalt öğesi olan bir Canvas oluşturur, ancak bu kez PlacementTargetellipse1olarak ayarlanır ve açılır pencere Ellipsealtında görünür.

<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 çizimde, PopupEllipsegöre konumlandırılmış olduğu gösterilmektedir.

Açılan Menüsü, PlacementTarget ile üç noktaAçılan Menüsüne göre konumlandırıldı

Uyarı

ToolTipiçin varsayılan Placement değeri Mousedeğeridir. ContextMenuiçin varsayılan Placement değeri MousePointdeğeridir. Bu değerler daha sonra "Özelliklerin Birlikte Çalışması" bölümünde açıklanmıştır.

Hedef Alan

hedef alanı, ekranda Popup göreli olduğu alandır. Önceki örneklerde, Popup hedef nesnenin sınırlarıyla hizalanır, ancak bazı durumlarda, Popup hedef nesnesi olsa bile Popup diğer sınırlarla hizalanır. PlacementRectangle özelliği ayarlanırsa, hedef alan hedef nesnenin sınırlarından farklıdır.

Aşağıdaki örnek, her biri bir Canvas ve bir Rectangleiçeren iki Popup nesnesi oluşturur. Her iki durumda da, Popup hedef nesnesi Canvas. İlk Popup'deki Canvas, PlacementRectangle kümesine sahip olup, X, Y, Widthve Height özellikleri sırasıyla 50, 50, 50 ve 100 olarak ayarlanmış. İkinci Popup'deki Canvas, PlacementRectangle ayarına sahip değil. Sonuç olarak, ilk PopupPlacementRectangle altına, ikinci PopupCanvasaltına yerleştirilir. Her Canvas, ilk RectanglePlacementRectangle ile aynı sınırlara sahip bir Popup de içerir. PlacementRectangle uygulamada görünür bir öğe oluşturmadığını unutmayın; örnek, Rectangletemsil eden bir PlacementRectangle oluşturur.

<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.

PlacementRectangle ile ve PlacementRectangle olmadan Açılan pencere

Hedef Kaynak ve Açılan Hizalama Noktası

hedef kaynağı ve açılır pencere hizalama noktası, sırasıyla hedef alan ve açılır pencere üzerinde konumlandırma için kullanılan referans noktalarıdır. Açılan pencereye hedef alandan uzaklık sağlamak için HorizontalOffset ve VerticalOffset özelliklerini kullanabilirsiniz. HorizontalOffset ve VerticalOffset hedef orijin ve açılır pencere hizalama noktası ile ilişkilidir. Placement özelliğinin değeri, hedef kaynağın ve açılır hizalama noktasının nerede bulunduğunu belirler.

Aşağıdaki örnek bir Popup oluşturur ve HorizontalOffset ve VerticalOffset özelliklerini 20 olarak ayarlar. Placement özelliği Bottom (varsayılan) olarak ayarlanır, bu nedenle hedef kaynak hedef alanın sol alt köşesi ve açılır hizalama noktası Popupsol üst köşesi olur.

<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.

Hedef köken hizalama noktası ile Açılır pencere yerleşimi

Özellikler Birlikte Nasıl Çalışır?

Doğru hedef alanı, hedef kaynağı ve açılır hizalama noktasını bulmak için PlacementTarget, PlacementRectangleve Placement değerleri birlikte değerlendirilmelidir. Örneğin, Placement değeri Mouseise hedef nesne yoktur; bu durumda PlacementRectangle yoksayılır ve hedef alan fare işaretçisinin sınırları olur. Öte yandan, PlacementBottomise, hedef nesneyi PlacementTarget veya üst öğe belirler ve PlacementRectangle hedef alanı belirler.

Aşağıdaki tabloda hedef nesne, hedef alan, hedef kaynak ve açılır hizalama noktası açıklanır ve her PlacementTarget numaralandırma değeri için PlacementRectangle ve PlacementMode kullanılıp kullanılmadığı gösterilir.

Yerleştirme Modu Hedef nesne Hedef alan Hedef kaynak Açılan hizalama noktası
Absolute Uygulanamaz. PlacementTarget göz ardı edilir. Ekran veya ayarlanmışsa PlacementRectangle. PlacementRectangle ekrana göredir. Hedef alanın sol üst köşesi. Popup'ın sol üst köşesi.
AbsolutePoint Uygulanamaz. PlacementTarget göz ardı edilir. Ekran veya ayarlanmışsa PlacementRectangle. PlacementRectangle ekrana göredir. Hedef alanın sol üst köşesi. Popup'ın sol üst köşesi.
Bottom PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. Hedef alanın sol alt köşesi. Popup'ın sol üst köşesi.
Center PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. Hedef alanın merkezi. Popup'un merkezi.
Custom PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. CustomPopupPlacementCallbacktarafından tanımlanır. CustomPopupPlacementCallbacktarafından tanımlanır.
Left PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. Hedef alanın sol üst köşesi. Popupsağ üst köşesi.
Mouse Uygulanamaz. PlacementTarget göz ardı edilir. Fare işaretçisinin sınırları. PlacementRectangle göz ardı edilir. Hedef alanın sol alt köşesi. Popup'ın sol üst köşesi.
MousePoint Uygulanamaz. PlacementTarget göz ardı edilir. Fare işaretçisinin sınırları. PlacementRectangle göz ardı edilir. Hedef alanın sol üst köşesi. Popup'ın sol üst köşesi.
Relative PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. Hedef alanın sol üst köşesi. Popup'ın sol üst köşesi.
RelativePoint PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. Hedef alanın sol üst köşesi. Popup'ın sol üst köşesi.
Right PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. Hedef alanın sağ üst köşesi. Popup'ın sol üst köşesi.
Top PlacementTarget veya ebeveyn. Hedef nesne veya eğer ayarlanmışsa PlacementRectangle. PlacementRectangle hedef nesneye göredir. Hedef alanın sol üst köşesi. Popupsol alt köşesi.

Aşağıdaki illüstrasyonlar, her Popup değeri için PlacementMode, hedef alan, hedef başlangıcı ve açılır menü hizalama noktasını göstermektedir. Her şekilde hedef alan sarı, Popup mavidir.

Mutlak veya MutlakPoint yerleşimine sahip açılır pencere

Alt yerleştirme

Merkezde yerleştirilmiş popup pencere

Sol tarafta yerleşimli açılır pencere

Fare yerleşimi

MousePoint yerleşimi ile açılan pencere

Göreli veya RelativePoint yerleşimi

Sağ yerleştirmeyle açılır pencere

En iyi yerleştirme

Açılan Pencere Ekranın Kenarıyla Karşılaştığında

Güvenlik nedeniyle, Popup ekranın kenarında gizlenemez. Popup bir ekran kenarıyla karşılaştığında aşağıdaki üç şeyden biri gerçekleşir:

  • Açılan pencere, Popup'ı gizleyecek olan ekran kenarı boyunca kendini yeniden hizalar.

  • Açılan pencerede farklı bir açılır hizalama noktası kullanılır.

  • Açılan pencerede farklı bir hedef kaynak ve açılır pencere hizalama noktası kullanılır.

Bu seçenekler bu bölümün ilerleyen bölümlerinde açıklanmaktadır.

Popup bir ekran kenarıyla karşılaştığında davranışı, Placement özelliğinin değerine ve açılır pencereyle hangi ekran kenarının karşılaştığına bağlıdır. Aşağıdaki tabloda, Popup her PlacementMode değeri için bir ekran kenarıyla karşılaştığında ortaya çıkabilecek davranış özetlemektedir.

Yerleştirme Modu Üst kenar Alt kenar Sol kenar Sağ kenar
Absolute Üst kenarla hizalanır. Alt kenarla hizalanır. Sol kenara hizalanır. Sağ kenarla hizalanır.
AbsolutePoint Üst kenarla hizalanır. Açılır pencerenin hizalama noktası, Popup'ın sol alt köşesine dönüşür. Sol kenara hizalanır. Açılan hizalama noktası, Popupsağ üst köşesine değişir.
Bottom Üst kenarla hizalanır. Hedef başlangıç noktası, hedef alanın sol üst köşesine değişir ve açılır hizalama noktası, Popup'ın sol alt köşesine değişir. Sol kenara hizalanır. Sağ kenarla hizalanır.
Center Üst kenarla hizalanır. Alt kenarla hizalanır. Sol kenara hizalanır. Sağ kenarla hizalanır.
Left Üst kenarla hizalanır. Alt kenarla hizalanır. Hedef orijin, hedef alanın sağ üst köşesine ayarlanır ve açılır pencere hizalama noktası, Popup'ın sol üst köşesine değişir. Sağ kenarla hizalanır.
Mouse Üst kenarla hizalanır. Hedefin orijini, hedef alanın sol üst köşesine (fare işaretçisinin sınırlarına) ve açılır pencerenin hizalama noktası ise Popup'nın sol alt köşesine değişir. Sol kenara hizalanır. Sağ kenarla hizalanır.
MousePoint Üst kenarla hizalanır. Açılır pencerenin hizalama noktası, Popup'ın sol alt köşesine dönüşür. Sol kenara hizalanır. Açılır pencerenin hizalama noktası, açılır pencerenin sağ üst köşesine değişir.
Relative Üst kenarla hizalanır. Alt kenarla hizalanır. Sol kenara hizalanır. Sağ kenarla hizalanır.
RelativePoint Üst kenarla hizalanır. Açılır pencerenin hizalama noktası, Popup'ın sol alt köşesine dönüşür. Sol kenara hizalanır. Açılır pencerenin hizalama noktası, açılır pencerenin sağ üst köşesine değişir.
Right Üst kenarla hizalanır. Alt kenarla hizalanır. Sol kenara hizalanır. Hedef orijin, hedef bölgesinin sol üst köşesine, açılır hizalama noktası ise Popup'ün sağ üst köşesine değişir.
Top Hedefin başlangıç noktası, hedef alanın sol alt köşesine, açılır pencere hizalama noktası ise Popupsol üst köşesine değişir. Aslında bu, PlacementBottomile aynıdır. Alt kenarla hizalanır. Sol kenara hizalanır. Sağ kenarla hizalanır.

Ekran Kenarına Hizalama

Popup, Popup tamamının ekranda görünmesi için kendisini yeniden konumlandırarak ekranın kenarına hizalanabilir. Bu durumda, hedef kaynak ile açılır hizalama noktası arasındaki uzaklık HorizontalOffset ve VerticalOffsetdeğerlerinden farklı olabilir. Placement Absolute, Centerveya Relativeolduğunda, Popup kendisini her ekran kenarına hizalar. Örneğin, bir Popup için Placement'in Relative'ye ve VerticalOffset'ün 100'e ayarlandığını varsayalım. Ekranın alt kenarı Popuptamamını veya bir kısmını gizlerse, Popup kendisini ekranın alt kenarı boyunca yeniden konumlandırır ve hedef çıkış noktası ile açılan hizalama noktası arasındaki dikey uzaklık 100'den azdır. Aşağıdaki çizimde bu gösterilmektedir.

Ekranın kenarına hizalanmış açılan pencere

Açılan Hizalama Noktasını Değiştirme

Placement AbsolutePoint, RelativePointveya MousePointise, açılan pencere alt veya sağ ekran kenarıyla karşılaştığında açılır hizalama noktası değişir.

Aşağıdaki çizimde, alt ekran kenarı Popuptamamını veya bir kısmını gizlediğinde açılır hizalama noktasının Popupsol alt köşesi olduğu gösterilmektedir.

Sol alt köşedeki ekran kenarını aşan açılan hizalama noktasının bulunduğu hedef alanını gösteren ekran görüntüsü.

Aşağıdaki çizim, Popup sağ ekran kenarı tarafından gizlendiğinde, hizalama noktasının Popup'in sağ üst köşesi olduğunu göstermektedir.

Ekran kenarından dolayı yeni açılan pencere hizalama noktası

Popup, alt ve sağ ekran kenarlarına ulaşırsa, açılır pencerenin hizalama noktası Popup'in sağ alt köşesi olur.

Hedef Başlangıç Noktası ve Açılır Hizalama Noktasını Değiştirme

Placement Bottom, Left, Mouse, Rightveya Topolduğunda, belirli bir ekran kenarıyla karşılaşıldığında hedef kaynak ve açılır hizalama noktası değişir. Konumun değişmesine neden olan ekran kenarı, PlacementMode değerine bağlıdır.

Aşağıdaki çizim, PlacementBottom olduğunda ve Popup alt ekran kenarıyla karşılaştığında hedef orijinin hedef alanın sol üst köşesi, açılır pencerenin hizalama noktasının ise Popupsol alt köşesi olduğunu göstermektedir.

Ekranın üst yarısındaki Hedef alanını gösteren ekran görüntüsü ve ekranın alt yarısında Dikey Uzaklık değeri 5 olan Açılır hizalama noktası bulunur.

Aşağıdaki çizimde, PlacementLeft ve Popup sol ekran kenarıyla karşılaştığında, hedefin başlangıç noktası hedef alanın sağ üst köşesi ve açılan hizalama noktası Popupsol üst köşesi olmaktadır.

Sol ekran kenarı nedeniyle yeni hizalama noktası

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

Sağ ekran kenarı nedeniyle yeni hizalama noktası

Aşağıdaki çizim, PlacementTop olduğunda ve Popup üst ekran kenarıyla karşılaştığında hedef kaynağın konumunun hedef alanın sol alt köşesi, açılan pencere hizalama noktasının ise Popupsol üst köşesi olduğunu göstermektedir.

Üst ekran kenarı nedeniyle yeni hizalama noktası

Aşağıdaki çizimde, PlacementMouse olduğunda ve Popup alt ekran kenarıyla karşılaştığında, hedef köşe hedef alanın sol üst köşesi (fare işaretçisinin sınırları) olarak belirlenir ve açılır pencerenin hizalama noktası Popup'ün sol alt köşesi olur.

Farenin ekran kenarına yakın olması nedeniyle yeni hizalama noktası

Açılır Pencere Yerleşimini Özelleştirme

Placement özelliğini Customolarak ayarlayarak hedef kaynak ve açılır hizalama noktasını özelleştirebilirsiniz. Ardından, CustomPopupPlacementCallbackiçin (tercih sırasına göre) bir dizi olası yerleştirme noktası ve birincil eksen döndüren bir Popup temsilcisi tanımlayın. Popup'ın en büyük bölümünü gösteren nokta seçilir. Popup ekranın kenarı tarafından gizlenirse Popup konumu otomatik olarak ayarlanır. Örnek için bkz. Özel Açılır Konum Belirle.

Ayrıca bakınız