Aracılığıyla paylaş


Açılan Pencere Yerleştirme Davranışı

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

Dekont

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

Açılan Pencereyi Konumlandırma

Popup nesnesi UIElement öğesine veya ekranın tamamına göre olarak yerleştirilebilir. Aşağıdaki örnek bir UIElement öğesine (bu örnekte bir resme) göre dört Popup denetimi oluşturur. Popup denetimlerinin tümünün PlacementTarget özelliği image1 olarak ayarlanmıştır ancak her Popup, yerleşim ö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 şekilde resim ve Popup denetimleri gösterilir

Image with four popup controls

Bu basit örnekte PlacementTarget ve Placement özelliklerinin nasıl ayarlanacağı gösterilir ama PlacementRectangle, HorizontalOffset ve VerticalOffset özelliklerini kullanarak Popup nesnesinin nerede konumlandırılacağı üzerinde daha da fazla denetim sahibi olursunuz.

! [NOT] Teslim 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üde sağ elinin hizalaması gösterilir ve açılır pencere sola yer alır.

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

Aşağıdaki terimler PlacementTarget, Placement, PlacementRectangle, HorizontalOffset ve VerticalOffset özelliklerinin birbirleriyle ve Popup ile ilişkisini anlamak için yararlıdır:

  • Hedef nesne

  • Hedef alan

  • Hedef başlangıç noktası

  • Açılan pencere hizalama noktası

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

Hedef Nesne

Hedef nesne, Popup nesnesinin ilişkilendirildiği öğedir. PlacementTarget özelliği ayarlanırsa, hedef nesneyi belirtir. PlacementTarget ayarlanmazsa ve Popup nesnesinin bir üst nesnesi varsa, üst nesne hedef nesnedir. PlacementTarget değeri ve üst nesne yoksa hedef nesne de yoktur ve Popup, ekrana göre konumlandırılır.

Aşağıdaki örnek, Canvas nesnesinin alt nesnesi olan bir Popup oluşturur. Örnekte, Popup nesnesinde PlacementTarget özelliği ayarlanmaz. Placement için varsayılan değer PlacementMode.Bottom değeridir, dolayısıyla Popup, Canvas nesnesinin altında görüntülenir.

<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 resimde Popup nesnesinin Canvas nesnesine göre konumlandırıldığı gösterilir.

Popup control with no PlacementTarget

Aşağıdaki örnekte Canvas nesnesinin alt nesnesi olan bir Popup oluşturulur ancak bu kez PlacementTarget, ellipse1 olarak ayarlanır, dolayısıyla açılan pencere Ellipse nesnesinin altında görüntülenir.

<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 resimde Popup nesnesinin Ellipse nesnesine göre konumlandırıldığı gösterilir.

Popup positioned relative to an ellipse

Dekont

ToolTip için Placement varsayılan değeri Mouse değeridir. ContextMenu için Placement varsayılan değeri MousePoint değeridir. Bu değerler daha sonra "Özelliklerin Birlikte Çalışması" bölümünde açıklanmaktadır.

Hedef Alan

Hedef alan, ekranda Popup nesnesinin göreli olarak yerleştirildiği alandır. Önceki örneklerde Popup hedef nesnenin sınırlarına hizalanır ama bazı durumlarda Popup nesnesinin bir hedef nesnesi olsa bile Popup başka sınırlara hizalanır. PlacementRectangle özelliği ayarlanırsa hedef alan hedef nesnenin sınırlarından farklı olur.

Aşağıdaki örnek, her biri bir Rectangle ve Popup içeren iki Canvas nesnesi oluşturur. Her iki durumda da Popup için hedef nesne Canvas nesnesidir. İlk Canvas nesnesindeki Popup üzerinde PlacementRectangle ayarlanmıştır ve X, Y, Width ile Height özellikleri de sırasıyla 50, 50, 50 ve 100 olarak ayarlanmıştır. İkinci Canvas nesnesindeki Popup için PlacementRectangle ayarlanmamıştır. Sonuç olarak ilk Popup, PlacementRectangle öğesinin altına ve ikinci Popup ise Canvas nesnesinin altına konumlandırılır. Ayrıca her Canvas, ilk Popup için PlacementRectangle ile aynı sınırlara sahip bir Rectangle içerir. PlacementRectangle öğesinin uygulamada görünür bir öğe oluşturmadığına dikkat edin; örnekte PlacementRectangle öğesini temsil etmek üzere bir Rectangle 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 resimde önceki örneğin sonucu gösterilir.

Popup with and without PlacementRectangle

Hedef Başlangıç Noktası ve Açılan Pencere Hizalama Noktası

Hedef başlangıç noktası ve açılan pencere hizalama noktası konumlandırma için kullanılan, sırasıyla hedef alandaki ve açılan penceredeki başvuru noktalarıdır. Açılan pencereyi hedef alandan kaydırmak için HorizontalOffset ve VerticalOffset özelliklerini kullanabilirsiniz. HorizontalOffset ve VerticalOffset hedef başlangıç noktasına ve açılan pencere hizalama noktasına göre belirlenir. Placement özelliğinin değeri hedef başlangıç noktası ile açılan pencere hizalama noktasının nerede konumlandırılacağını belirler.

Aşağıdaki örnek bir Popup oluşturur ve HorizontalOffset ile VerticalOffset özelliklerini 20 değerine ayarlar. Placement özelliği Bottom (varsayılan) değerine ayarlanmıştır, dolayısıyla hedef başlangıç noktası hedef alanın sol alt köşesi ve açılan pencere hizalama noktası da Popup nesnesinin sol üst köşesidir.

<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 resimde önceki örneğin sonucu gösterilir.

Popup placement with target origin alignment point

Özelliklerin Birlikte Çalışması

Doğru hedef alanı, hedef başlangıç noktasını ve açılan pencere hizalama noktasını belirlemek için PlacementTarget, PlacementRectangle ve Placement öğelerinin değerleri birlikte dikkate alınmalıdır. Örneğin Placement değeri Mouse olduğunda hedef nesne yoktur, PlacementRectangle yoksayılır ve hedef alan da fare işaretçisinin sınırlarıdır. Öte yandan Placement değeri Bottom olduğunda, PlacementTarget veya üst öğesi hedef nesneyi ve PlacementRectangle, hedef alanı belirler.

Aşağıdaki tabloda hedef nesne, hedef alan, hedef başlangıç noktası ve açılan pencere hizalama noktası belirlenir, ayrıca her PlacementMode sabit listesi değeri için PlacementTarget ve PlacementRectangle kullanılıp kullanılmadığını gösterir.

PlacementMode Hedef nesne Hedef alan Hedef başlangıç noktası Açılan pencere hizalama noktası
Absolute Uygulanamaz. PlacementTarget yoksayılır. Ekran veya ayarlandıysa PlacementRectangle. PlacementRectangle ekrana göre yerleştirilir. Hedef alanın sol üst köşesi. Popup nesnesinin sol üst köşesi.
AbsolutePoint Uygulanamaz. PlacementTarget yoksayılır. Ekran veya ayarlandıysa PlacementRectangle. PlacementRectangle ekrana göre yerleştirilir. Hedef alanın sol üst köşesi. Popup nesnesinin sol üst köşesi.
Bottom PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. Hedef alanın sol alt köşesi. Popup nesnesinin sol üst köşesi.
Center PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. Hedef alanın ortası. Popup nesnesinin ortası.
Custom PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. CustomPopupPlacementCallback tarafından tanımlanır. CustomPopupPlacementCallback tarafından tanımlanır.
Left PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. Hedef alanın sol üst köşesi. Popup nesnesinin sağ üst köşesi.
Mouse Uygulanamaz. PlacementTarget yoksayılır. Fare işaretçisinin sınırları. PlacementRectangle yoksayılır. Hedef alanın sol alt köşesi. Popup nesnesinin sol üst köşesi.
MousePoint Uygulanamaz. PlacementTarget yoksayılır. Fare işaretçisinin sınırları. PlacementRectangle yoksayılır. Hedef alanın sol üst köşesi. Popup nesnesinin sol üst köşesi.
Relative PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. Hedef alanın sol üst köşesi. Popup nesnesinin sol üst köşesi.
RelativePoint PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. Hedef alanın sol üst köşesi. Popup nesnesinin sol üst köşesi.
Right PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. Hedef alanın sağ üst köşesi. Popup nesnesinin sol üst köşesi.
Top PlacementTarget veya üst öğe. Hedef nesne veya ayarlandıysa PlacementRectangle. PlacementRectangle hedef nesneye göre yerleştirilir. Hedef alanın sol üst köşesi. Popup nesnesinin sol alt köşesi.

Aşağıdaki resimlerde her PlacementMode değeri için Popup, hedef alan, hedef başlangıç noktası ve açılan pencere hizalama noktası gösterilir. Bu şekillerde hedef alan sarı ve Popup ise mavidir.

Popup with Absolute or AbsolutePoint placement

Popup with Bottom placement

Popup with Center placement

Popup with Left placement

Popup with Mouse placement

Popup with MousePoint placement

Popup with Relative or RelativePoint placement

Popup with Right placement

Popup with Top placement

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

Popup, güvenlik nedeniyle ekranın kenarı tarafından gizlenemez. Popup ekranın kenarıyla karşılaştığında aşağıdaki üç durumdan biri oluşur:

  • Açılan pencere ekranın Popup nesnesini gizleyebilecek olan kenarı boyunca kendini yeniden hizalar.

  • Açılan pencere farklı bir açılan pencere hizalama noktasını kullanır.

  • Açılan pencere farklı bir hedef başlangıç noktası ve açılan pencere hizalama noktasını kullanır.

Bu seçenekler bu bölümün devamında daha ayrıntılı açıklanmıştır.

Popup nesnesinin ekran kenarıyla karşılaştığı durumdaki davranışı Placement özelliğinin değerine ve açılan pencerenin hangi ekran kenarıyla karşılaştığına bağlıdır. Aşağıdaki tabloda, her PlacementMode değeri için Popup bir ekran kenarıyla karşılaştığında gerçekleşen davranış özetlenir.

PlacementMode Üst kenar Alt kenar Sol kenar Sağ kenar
Absolute Üst kenara hizalanır. Alt kenara hizalanır. Sol kenara hizalanır. Sağ kenara hizalanır.
AbsolutePoint Üst kenara hizalanır. Açılan pencere hizalama noktası Popup nesnesinin sol alt köşesi olacak şekilde değişir. Sol kenara hizalanır. Açılan pencere hizalama noktası Popup nesnesinin sağ üst köşesi olacak şekilde değişir.
Bottom Üst kenara hizalanır. Hedef başlangıç noktası hedef alanın sol üst köşesi olarak ve açılan pencere hizalama noktası da Popup nesnesinin sol alt köşesi olarak değişir. Sol kenara hizalanır. Sağ kenara hizalanır.
Center Üst kenara hizalanır. Alt kenara hizalanır. Sol kenara hizalanır. Sağ kenara hizalanır.
Left Üst kenara hizalanır. Alt kenara hizalanır. Hedef başlangıç noktası hedef alanın sağ üst köşesi olarak ve açılan pencere hizalama noktası da Popup nesnesinin sol üst köşesi olarak değişir. Sağ kenara hizalanır.
Mouse Üst kenara hizalanır. Hedef başlangıç noktası hedef alanın (fare işaretçisinin sınırları) sol üst köşesi olarak ve açılan pencere hizalama noktası da Popup nesnesinin sol alt köşesi olarak değişir. Sol kenara hizalanır. Sağ kenara hizalanır.
MousePoint Üst kenara hizalanır. Açılan pencere hizalama noktası Popup nesnesinin sol alt köşesi olacak şekilde değişir. Sol kenara hizalanır. Açılan pencere hizalama noktası açılan pencerenin sağ üst köşesi olacak şekilde değişir.
Relative Üst kenara hizalanır. Alt kenara hizalanır. Sol kenara hizalanır. Sağ kenara hizalanır.
RelativePoint Üst kenara hizalanır. Açılan pencere hizalama noktası Popup nesnesinin sol alt köşesi olacak şekilde değişir. Sol kenara hizalanır. Açılan pencere hizalama noktası açılan pencerenin sağ üst köşesi olacak şekilde değişir.
Right Üst kenara hizalanır. Alt kenara hizalanır. Sol kenara hizalanır. Hedef başlangıç noktası hedef alanın sol üst köşesi olarak ve açılan pencere hizalama noktası da Popup nesnesinin sağ üst köşesi olarak değişir.
Top Hedef başlangıç noktası hedef alanın sol alt köşesi olarak ve açılan pencere hizalama noktası da Popup nesnesinin sol üst köşesi olarak değişir. Aslında bu durum, Placement öğesinin Bottom ayarıyla aynıdır. Alt kenara hizalanır. Sol kenara hizalanır. Sağ kenara hizalanır.

Ekran Kenarına Hizalama

Popup, kendini yeniden konumlandırarak ekranın kenarına hizalanabilir ve böylece Popup tam olarak ekranda görünür olur. Bu durum oluştuğunda hedef başlangıç noktası ile açılan pencere hizalama noktası arasındaki uzaklık HorizontalOffset ve VerticalOffset değerlerinden farklı olabilir. Placement değeri Absolute, Center veya Relative olduğunda Popup, kendini ekranın her kenarına hizalar. Örneğin Popup nesnesinde Placement özelliğinin Relative değerine ve VerticalOffset özelliğinin 100 değerine ayarlandığını düşünün. Popup kısmen veya tamamen ekranın alt kenarı tarafından gizleniyorsa, Popup kendini ekranın alt kenarı boyunca yeniden konumlandırır ve hedef başlangıç noktası ile açılan pencere hizalama noktası arasındaki dikey uzaklık 100'den az olur. Aşağıdaki resimde bu gösterilmektedir.

Popup that aligns to edge of screen

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

Placement değeri AbsolutePoint, RelativePoint veya MousePoint olduğunda, açılan pencerenin ekranın alt veya sağ kenarıyla karşılaşması durumunda açılan pencere hizalama noktası değişir.

Aşağıdaki resimde alt ekran kenarı Popup nesnesini tamamen veya kısmen gizlediğinde, açılan pencere hizalama noktasının Popup nesnesinin sol alt köşesi olduğu gösterilir.

Screenshot showing the Target area with the Popup alignment point going past the Screen Edge in the bottom-left corner.

Aşağıdaki resimde Popup sağ ekran kenarı tarafından gizlendiğinde açılan pencere hizalama noktasının Popup nesnesinin sağ üst köşesi olduğu gösterilir.

New popup alignment point due to screen edge

Popup ekranın alt ve sağ kenarlarıyla karşılaştığında açılan pencere hizalama noktası Popup nesnesinin sağ alt köşesi olur.

Hedef Başlangıç Noktası ve Açılan Pencere Hizalama Noktasını Değiştirme

Placement değeri Bottom, Left, Mouse, Right veya Top olduğunda, hedef başlangıç noktası ve açılan pencere hizalama noktası belirli bir ekran kenarıyla karşılaşırsa değişir. Konumun değişmesine neden olan ekran kenarı, PlacementMode değerine bağlıdır.

Aşağıdaki resimde Placement değeri Bottom olduğunda ve Popup ekranın alt kenarıyla karşılaştığında hedef başlangıç noktasının hedef alanın sol üst köşesi ve açılan pencere hizalama noktasının Popup nesnesinin sol alt köşesi olduğu gösterilir.

Screenshot showing the Target area in the top half of the screen with the Popup alignment point on the bottom half of the screen with a Vertical Offset of 5.

Aşağıdaki resimde Placement değeri Left olduğunda ve Popup ekranın sol kenarıyla karşılaştığında hedef başlangıç noktasının hedef alanın sağ üst köşesi ve açılan pencere hizalama noktasının Popup nesnesinin sol üst köşesi olduğu gösterilir.

New alignment point due to left screen edge

Aşağıdaki resimde Placement değeri Right olduğunda ve Popup ekranın sağ kenarıyla karşılaştığında hedef başlangıç noktasının hedef alanın sol üst köşesi ve açılan pencere hizalama noktasının Popup nesnesinin sağ üst köşesi olduğu gösterilir.

New alignment point due to right screen edge

Aşağıdaki resimde Placement değeri Top olduğunda ve Popup ekranın üst kenarıyla karşılaştığında hedef başlangıç noktasının hedef alanın sol alt köşesi ve açılan pencere hizalama noktasının Popup nesnesinin sol üst köşesi olduğu gösterilir.

New alignment point due to top screen edge

Aşağıdaki resimde Placement değeri Mouse olduğunda ve Popup ekranın alt kenarıyla karşılaştığında hedef başlangıç noktasının hedef alanın sol üst köşesi (fare işaretçisinin sınırları) ve açılan pencere hizalama noktasının Popup nesnesinin sol alt köşesi olduğu gösterilir.

new alignment point due to mouse near screen edge

Açılan Pencere Yerleşimini Özelleştirme

Placement özelliğini Custom değerine ayarlayarak hedef başlangıç noktasını ve açılan pencere hizalama noktasını özelleştirebilirsiniz. Ardından Popup için olası yerleşim noktaları ve birincil eksenler kümesini (tercih sırasıyla) döndüren bir CustomPopupPlacementCallback temsilcisi tanımlayın. Popup nesnesinin en büyük bölümünü gösteren nokta seçilidir. Popup ekranın kenarı tarafından gizlenmişse Popup konumu otomatik olarak ayarlanır. Özel Açılan Pencere Konumu Belirtme konusunda bir örnek görebilirsiniz.

Ayrıca bkz.