Zachowanie położenia okna podręcznego

Kontrolka Popup wyświetla zawartość w osobnym oknie, które unosi się nad aplikacją. Możesz określić położenie kontrolki Popup , myszy lub ekranu przy użyciu PlacementTargetwłaściwości , Placement, PlacementRectangle, HorizontalOffseti VerticalOffset . Te właściwości współpracują ze sobą, aby zapewnić elastyczność określania pozycji elementu Popup.

Uwaga

Klasy ToolTip i ContextMenu definiują również te pięć właściwości i zachowują się podobnie.

Pozycjonowanie wyskakującego okienka

Umieszczenie obiektu Popup może być względne względem elementu UIElement lub do całego ekranu. W poniższym przykładzie są tworzone cztery Popup kontrolki względne — UIElementw tym przypadku obraz. Wszystkie kontrolki Popup mają PlacementTarget właściwość ustawioną na image1, ale każda z nich Popup ma inną wartość właściwości umieszczania.

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

Poniższa ilustracja przedstawia obraz i kontrolki Popup

Image with four popup controls

W tym prostym przykładzie pokazano, jak ustawić PlacementTarget właściwości i Placement , ale przy użyciu PlacementRectanglewłaściwości , HorizontalOffseti VerticalOffset masz jeszcze większą kontrolę nad lokalizacją Popup obiektu .

Definicje terminów: Anatomia wyskakującego okienka

Poniższe terminy są przydatne w zrozumieniu, jak PlacementTargetwłaściwości , Placement, PlacementRectanglei VerticalOffsetHorizontalOffsetodnoszą się do siebie nawzajem i :Popup

  • Obiekt docelowy

  • Obszar docelowy

  • Źródło obiektu docelowego

  • Punkt wyrównania wyskakującego okienka

Te terminy zapewniają wygodny sposób odwoływania się do różnych aspektów Popup i kontroli, z którą jest ona skojarzona.

Obiekt docelowy

Obiekt docelowy jest elementem Popup skojarzonym z. PlacementTarget Jeśli właściwość jest ustawiona, określa obiekt docelowy. Jeśli PlacementTarget nie jest ustawiona, a obiekt Popup nadrzędny ma obiekt nadrzędny, jest obiektem docelowym. Jeśli nie PlacementTarget ma wartości i nie ma elementu nadrzędnego, nie ma obiektu docelowego i Popup jest umieszczony względem ekranu.

Poniższy przykład tworzy element Popup podrzędny elementu Canvas. Przykład nie ustawia PlacementTarget właściwości w obiekcie Popup. Wartością domyślną parametru Placement jest PlacementMode.Bottom, więc jest Popup wyświetlana poniżej elementu 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>

Na poniższej ilustracji pokazano, że Popup pozycja jest umieszczona względem elementu Canvas.

Popup control with no PlacementTarget

Poniższy przykład tworzy element Popup podrzędny elementu Canvas, ale tym razem PlacementTarget parametr jest ustawiony na ellipse1wartość , więc okienko podręczne pojawi się poniżej 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>

Na poniższej ilustracji pokazano, że Popup pozycja jest umieszczona względem elementu Ellipse.

Popup positioned relative to an ellipse

Uwaga

W przypadku ToolTipparametru wartość domyślna Placement to Mouse. W przypadku ContextMenuparametru wartość domyślna Placement to MousePoint. Te wartości zostały wyjaśnione później w sekcji "Jak działają właściwości razem".

Obszar docelowy

Obszar docelowy to obszar na ekranie, z którego Popup jest względny. W poprzednich przykładach element Popup jest wyrównany do granic obiektu docelowego, ale w niektórych przypadkach Popup element jest wyrównany do innych granic, nawet jeśli Popup obiekt docelowy ma obiekt docelowy. PlacementRectangle Jeśli właściwość jest ustawiona, obszar docelowy różni się od granic obiektu docelowego.

Poniższy przykład tworzy dwa Canvas obiekty, z których każdy zawiera element Rectangle i .Popup W obu przypadkach obiektem docelowym obiektu Popup jest Canvas. Element Popup w pierwszym Canvas z nich ma PlacementRectangle zestaw z właściwościami X, , WidthYi Height ustawionymi odpowiednio na 50, 50, 50 i 100. W Popup drugim Canvas nie ma PlacementRectangle zestawu. W rezultacie pierwsza Popup pozycja znajduje się poniżej, PlacementRectangle a druga Popup znajduje się poniżej .Canvas Każda z nich Canvas zawiera Rectangle również te same granice co PlacementRectangle dla pierwszego Popupelementu . Zwróć uwagę, że element PlacementRectangle nie tworzy widocznego elementu w aplikacji. W przykładzie zostanie utworzony Rectangle element reprezentujący PlacementRectangleelement .

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

Poniższa ilustracja przedstawia wynik poprzedniego przykładu.

Popup with and without PlacementRectangle

Docelowy punkt wyrównania źródła i wyskakującego okienka

Docelowy punkt wyrównania i punkt wyrównania wyskakującego są punktami odniesienia odpowiednio w obszarze docelowym i wyskakującym, które są używane do pozycjonowania. Właściwości i VerticalOffset umożliwiają HorizontalOffset przesunięcie wyskakującego okna podręcznego z obszaru docelowego. Wartości HorizontalOffset i VerticalOffset są względne względem źródła docelowego i punktu wyrównania wyskakującego. Wartość Placement właściwości określa, gdzie znajduje się docelowy punkt wyrównania źródła i wyskakujących okienek.

Poniższy przykład tworzy Popup obiekt i ustawia HorizontalOffset właściwości i VerticalOffset na wartość 20. Właściwość Placement jest ustawiona na Bottom (wartość domyślna), więc źródło docelowe jest lewym dolnym rogu obszaru docelowego, a punkt wyrównania wyskakującego to lewy górny róg 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>

Poniższa ilustracja przedstawia wynik poprzedniego przykładu.

Popup placement with target origin alignment point

Jak właściwości współpracują ze sobą

Wartości PlacementTarget, PlacementRectanglei Placement należy wziąć pod uwagę razem, aby ustalić prawidłowy obszar docelowy, źródło docelowe i punkt wyrównania wyskakującego. Jeśli na przykład wartość Placement to Mouse, nie ma obiektu docelowego, PlacementRectangle obiekt jest ignorowany, a obszar docelowy jest granicą wskaźnika myszy. Z drugiej strony, jeśli Placement jest , element PlacementTarget nadrzędny lub określa obiekt docelowy i PlacementRectangle określa Bottomobszar docelowy.

W poniższej tabeli opisano obiekt docelowy, obszar docelowy, źródło obiektu docelowego i punkt wyrównania wyskakującego oraz wskazuje, czy PlacementTarget i PlacementRectangle są używane dla każdej PlacementMode wartości wyliczenia.

Placementmode Obiekt docelowy Obszar docelowy Źródło obiektu docelowego Punkt wyrównania wyskakującego okienka
Absolute Nie dotyczy. Parametr PlacementTarget jest ignorowany. Ekran lub PlacementRectangle jeśli jest ustawiony. Element PlacementRectangle jest względny względem ekranu. Lewy górny róg obszaru docelowego. Lewy górny róg obiektu Popup.
AbsolutePoint Nie dotyczy. Parametr PlacementTarget jest ignorowany. Ekran lub PlacementRectangle jeśli jest ustawiony. Element PlacementRectangle jest względny względem ekranu. Lewy górny róg obszaru docelowego. Lewy górny róg obiektu Popup.
Bottom PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli jest ustawiony. Obiekt PlacementRectangle jest względny względem obiektu docelowego. Lewy dolny róg obszaru docelowego. Lewy górny róg obiektu Popup.
Center PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli jest ustawiony. Obiekt PlacementRectangle jest względny względem obiektu docelowego. Środek obszaru docelowego. Środek obiektu Popup.
Custom PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli jest ustawiony. Obiekt PlacementRectangle jest względny względem obiektu docelowego. Zdefiniowane przez element CustomPopupPlacementCallback. Zdefiniowane przez element CustomPopupPlacementCallback.
Left PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli jest ustawiony. Obiekt PlacementRectangle jest względny względem obiektu docelowego. Lewy górny róg obszaru docelowego. Prawy górny róg obiektu Popup.
Mouse Nie dotyczy. Parametr PlacementTarget jest ignorowany. Granice wskaźnika myszy. Parametr PlacementRectangle jest ignorowany. Lewy dolny róg obszaru docelowego. Lewy górny róg obiektu Popup.
MousePoint Nie dotyczy. Parametr PlacementTarget jest ignorowany. Granice wskaźnika myszy. Parametr PlacementRectangle jest ignorowany. Lewy górny róg obszaru docelowego. Lewy górny róg obiektu Popup.
Relative PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli został ustawiony. Obiekt PlacementRectangle jest powiązany z obiektem docelowym. Lewy górny róg obszaru docelowego. Lewy górny róg obiektu Popup.
RelativePoint PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli został ustawiony. Obiekt PlacementRectangle jest powiązany z obiektem docelowym. Lewy górny róg obszaru docelowego. Lewy górny róg obiektu Popup.
Right PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli został ustawiony. Obiekt PlacementRectangle jest powiązany z obiektem docelowym. Prawy górny róg obszaru docelowego. Lewy górny róg obiektu Popup.
Top PlacementTarget lub element nadrzędny. Obiekt docelowy lub PlacementRectangle jeśli został ustawiony. Obiekt PlacementRectangle jest powiązany z obiektem docelowym. Lewy górny róg obszaru docelowego. Lewy dolny róg obiektu Popup.

Na poniższych ilustracjach przedstawiono Popuppunkt wyrównania , obszar docelowy, źródło docelowe i punkt wyrównania wyskakującego okienka dla każdej PlacementMode wartości. Na każdej ilustracji obszar docelowy jest żółty i Popup niebieski.

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

Gdy okienko podręczne napotka krawędź ekranu

Ze względów Popup bezpieczeństwa nie można ukryć krawędzi ekranu. Jedna z następujących trzech rzeczy występuje, gdy Popup napotkasz krawędź ekranu:

  • Popup realigns się wzdłuż krawędzi ekranu, które zasłonić Popup.

  • Wyskakujące okienko używa innego punktu wyrównania wyskakującego.

  • Wyskakujące okienko używa innego punktu początkowego miejsca docelowego i punktu wyrównania wyskakującego.

Te opcje zostały opisane w dalszej części tej sekcji.

Zachowanie Popup obiektu, gdy napotka krawędź ekranu, zależy od wartości Placement właściwości i krawędzi ekranu, którą napotka okno podręczne. Poniższa tabela zawiera podsumowanie zachowania w przypadku Popup napotkania krawędzi ekranu dla każdej PlacementMode wartości.

Placementmode Górna krawędź Dolna krawędź Lewa krawędź Prawa krawędź
Absolute Wyrównuje do górnej krawędzi. Wyrównuje do dolnej krawędzi. Wyrównuje do lewej krawędzi. Wyrównuje do prawej krawędzi.
AbsolutePoint Wyrównuje do górnej krawędzi. Punkt wyrównania wyskakującego zmienia się w lewym dolnym rogu obiektu Popup. Wyrównuje do lewej krawędzi. Punkt wyrównania wyskakującego zmienia się w prawym górnym rogu obiektu Popup.
Bottom Wyrównuje do górnej krawędzi. Źródło docelowe zmienia się w lewym górnym rogu obszaru docelowego, a punkt wyrównania wyskakującego zmienia się w lewym dolnym rogu Popupobiektu . Wyrównuje do lewej krawędzi. Wyrównuje do prawej krawędzi.
Center Wyrównuje do górnej krawędzi. Wyrównuje do dolnej krawędzi. Wyrównuje do lewej krawędzi. Wyrównuje do prawej krawędzi.
Left Wyrównuje do górnej krawędzi. Wyrównuje do dolnej krawędzi. Źródło docelowe zmienia się w prawym górnym rogu obszaru docelowego, a punkt wyrównania wyskakującego zmienia się w lewym górnym rogu Popupobiektu . Wyrównuje do prawej krawędzi.
Mouse Wyrównuje do górnej krawędzi. Źródło docelowe zmienia się w lewym górnym rogu obszaru docelowego (granice wskaźnika myszy), a punkt wyrównania wyskakującego zmienia się w lewym dolnym rogu Popupobiektu . Wyrównuje do lewej krawędzi. Wyrównuje do prawej krawędzi.
MousePoint Wyrównuje do górnej krawędzi. Punkt wyrównania wyskakującego zmienia się w lewym dolnym rogu obiektu Popup. Wyrównuje do lewej krawędzi. Punkt wyrównania wyskakującego zmienia się w prawym górnym rogu wyskakującego okienka.
Relative Wyrównuje do górnej krawędzi. Wyrównuje do dolnej krawędzi. Wyrównuje do lewej krawędzi. Wyrównuje do prawej krawędzi.
RelativePoint Wyrównuje do górnej krawędzi. Punkt wyrównania wyskakującego zmienia się w lewym dolnym rogu obiektu Popup. Wyrównuje do lewej krawędzi. Punkt wyrównania wyskakującego zmienia się w prawym górnym rogu wyskakującego okienka.
Right Wyrównuje do górnej krawędzi. Wyrównuje do dolnej krawędzi. Wyrównuje do lewej krawędzi. Źródło docelowe zmienia się w lewym górnym rogu obszaru docelowego, a punkt wyrównania wyskakującego zmienia się w prawym górnym rogu Popupobiektu .
Top Źródło docelowe zmienia się w lewym dolnym rogu obszaru docelowego, a punkt wyrównania wyskakującego zmienia się w lewym górnym rogu Popupobiektu . W efekcie jest to takie samo, jak w przypadku , gdy Placement parametr ma Bottomwartość . Wyrównuje do dolnej krawędzi. Wyrównuje do lewej krawędzi. Wyrównuje do prawej krawędzi.

Wyrównywanie do krawędzi ekranu

Element Popup może być wyrównany do krawędzi ekranu, zmieniając położenie, tak aby cała część Popup ekranu jest widoczna na ekranie. W takim przypadku odległość między docelowym źródłem i punktem wyrównania wyskakującego może różnić się od wartości HorizontalOffset i VerticalOffset. Gdy Placement wartość to Absolute, Centerlub Relative, Popup wyrównuje się do każdej krawędzi ekranu. Załóżmy na przykład, że dla elementu Popup ustawiono Placement wartość Relative i VerticalOffset ustawiono wartość 100. Jeśli dolna krawędź ekranu ukrywa wszystkie lub część Popupobiektu , Popup zmienia położenie się wzdłuż dolnej krawędzi ekranu i odległość pionową między źródłem docelowym a punktem wyrównania wyskakującego jest mniejsza niż 100. Na poniższej ilustracji przedstawiono to.

Popup that aligns to edge of screen

Zmienianie punktu wyrównania wyskakującego

Jeśli Placement jest to AbsolutePoint, RelativePointlub MousePoint, punkt wyrównania wyskakującego zmienia się, gdy wyskakujące okienko napotka krawędź dolnego lub prawego ekranu.

Na poniższej ilustracji pokazano, że gdy krawędź dolnego ekranu ukrywa wszystkie lub część Popupobiektu , punkt wyrównania wyskakującego okienka to lewy dolny róg obiektu Popup.

New alignment point due to bottom screen edge

Na poniższej ilustracji pokazano, że gdy Popup element jest ukryty przy prawej krawędzi ekranu, punkt wyrównania okna podręcznego jest prawym górnym róg obiektu Popup.

New popup alignment point due to screen edge

Popup Jeśli napotkasz krawędzie dolnego i prawego ekranu, punkt wyrównania okna podręcznego to prawy dolny róg obiektu Popup.

Zmienianie punktu wyrównania źródła docelowego i wyskakującego okienka

Gdy Placement wartość to Bottom, , RightLeftMouselub Top, docelowy punkt początkowy i punkt wyrównania wyskakującego zmienia się, jeśli zostanie napotkana pewna krawędź ekranu. Krawędź ekranu, która powoduje zmianę PlacementMode położenia, zależy od wartości.

Na poniższej ilustracji pokazano, że gdy Placement element znajduje Bottom się i Popup napotka krawędź dolnego ekranu, źródło docelowe jest lewym górnym róg obszaru docelowego, a punkt wyrównania wyskakującego jest lewym dolnym rogu Popupobiektu .

New alignment point due to bottom screen edge

Na poniższej ilustracji pokazano, że gdy Placement jest i LeftPopup napotka lewą krawędź ekranu, miejsce docelowe jest prawym górnym rogu obszaru docelowego, a punkt wyrównania wyskakującego jest lewym górnym rogu Popupobiektu .

New alignment point due to left screen edge

Na poniższej ilustracji pokazano, że gdy Placement element znajduje Right się i Popup napotka prawą krawędź ekranu, źródło docelowe jest lewym górnym róg obszaru docelowego, a punkt wyrównania wyskakującego jest prawym górnym rogu Popupobiektu .

New alignment point due to right screen edge

Na poniższej ilustracji pokazano, że kiedy Placement jest Top i Popup napotka górną krawędź ekranu, miejsce docelowe jest lewym dolnym rogu obszaru docelowego, a punkt wyrównania wyskakującego jest lewym górnym rogu Popupobiektu .

New alignment point due to top screen edge

Na poniższej ilustracji pokazano, że kiedy Placement jest Mouse i Popup napotyka krawędź dolnego ekranu, miejsce docelowe jest lewym górnym róg obszaru docelowego (granice wskaźnika myszy), a punkt wyrównania wyskakującego jest lewym dolnym rogu Popupobiektu .

new alignment point due to mouse near screen edge

Dostosowywanie umieszczania wyskakujących okienek

Możesz dostosować docelowy punkt początkowy i punkt wyrównania wyskakujących okienek, ustawiając Placement właściwość na Custom. Następnie zdefiniuj CustomPopupPlacementCallback delegata, który zwraca zestaw możliwych punktów umieszczania i osi podstawowych (w kolejności preferencji) dla elementu Popup. Punkt, który pokazuje największą część obiektu, jest zaznaczony Popup . Położenie obiektu Popup jest automatycznie dostosowywane, jeśli Popup element jest ukryty przez krawędź ekranu. Aby zapoznać się z przykładem, zobacz Określanie niestandardowej pozycji wyskakujących okienek.

Zobacz też