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
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.
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.
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.
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.
Ö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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin