Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovládací Popup prvek zobrazí obsah v samostatném okně, které je plovoucí nad aplikací. Můžete určit polohu Popup vůči ovládacímu prvku, myši nebo obrazovce pomocí vlastností PlacementTarget, Placement, PlacementRectangle, HorizontalOffset, a VerticalOffset. Tyto vlastnosti spolupracují, abyste získali flexibilitu při určování pozice objektu Popup.
Poznámka:
Třídy ToolTip a ContextMenu také definují těchto pět vlastností a chovají se podobně.
Umístění vyskakovacího okna
Umístění Popup může být relativní vzhledem k UIElement nebo k celé obrazovce. Následující příklad vytvoří čtyři Popup ovládací prvky, které jsou relativní vzhledem k obrázku UIElement– v tomto případě. Všechny ovládací prvky mají vlastnost Popup nastavenou na PlacementTarget, ale každý image1 má jinou hodnotu pro vlastnost umístění.
<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>
Následující ilustrace znázorňuje obraz a Popup ovládací prvky.
Tento jednoduchý příklad ukazuje, jak nastavit PlacementTarget a Placement vlastnosti, ale pomocí PlacementRectangle, HorizontalOffseta VerticalOffset vlastnosti, máte ještě větší kontrolu nad umístěním Popup .
! [POZNÁMKA] V závislosti na nastavení Windows týkajících se preferované ruky může být vyskakovací okno, když je zobrazeno v horní nebo dolní části, zarovnáno doleva nebo doprava. Předchozí obrázek znázorňuje zarovnání doprava, které umístí automaticky otevírané okno vlevo.
Definice pojmů: Anatomie automaticky otevíraného okna
Následující termíny jsou užitečné při pochopení, jak vlastnosti PlacementTarget, Placement, PlacementRectangle, HorizontalOffset, a VerticalOffset souvisejí navzájem a s Popup.
Cílový objekt
Cílová oblast
Cílový původ
Vyskakovací bod zarovnání
Tyto termíny poskytují jednoduchý způsob, jak odkazovat na různé aspekty Popup a na kontrolu, se kterou jsou spojeny.
Cílový objekt
Cílový objekt je prvek, ke kterému je Popup přidružen. PlacementTarget Pokud je vlastnost nastavena, určuje cílový objekt. Pokud PlacementTarget není nastavena a Popup má nadřazený objekt, nadřazený objekt je cílový objekt. Pokud neexistuje žádná PlacementTarget hodnota a žádný nadřazený objekt, neexistuje žádný cílový objekt a Popup umístění je relativní vzhledem k obrazovce.
Následující příklad vytvoří Popup, který je podřízeným prvkem Canvas. Příklad nenastaví PlacementTarget vlastnost v objektu Popup. Výchozí hodnota je PlacementPlacementMode.Bottom, takže Popup se zobrazí pod .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>
Následující obrázek znázorňuje umístění Popup vzhledem k objektu Canvas.
Následující příklad vytvoří Popup, která je podřízeným prvkem Canvas, ale tentokrát je PlacementTarget nastavena na ellipse1, takže se automaticky otevírané okno zobrazí pod 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>
Následující obrázek znázorňuje umístění Popup vzhledem k objektu Ellipse.
cs-CZ: 
Poznámka:
Pro ToolTip, výchozí hodnota Placement je Mouse. Pro ContextMenu, výchozí hodnota Placement je MousePoint. Tyto hodnoty jsou vysvětleny později v části "Jak vlastnosti spolupracují".
Cílová oblast
Cílová oblast je oblast na obrazovce, ke které Popup je relativní. V předchozích příkladech Popup je zarovnaná s hranicemi cílového objektu, ale v některých případech Popup je zarovnaná k jiným hranicím, i když Popup má cílový objekt. PlacementRectangle Pokud je vlastnost nastavena, cílová oblast se liší od hranic cílového objektu.
Následující příklad vytvoří dva Canvas objekty, každý z nich obsahuje a Rectangle a Popup. V obou případech je cílovým objektem pro PopupCanvas. V první Popup je Canvas, který má nastavení PlacementRectangle, a jeho vlastnosti X, Y, Width a Height jsou nastaveny na 50, 50, 50 a 100 v uvedeném pořadí. Ve Popup druhém Canvas není PlacementRectangle nastaveno. V důsledku toho je první Popup umístěn pod PlacementRectangle a druhý Popup je umístěn pod Canvas. Každá Canvas také obsahuje Rectangle, která má stejné hranice jako PlacementRectangle pro první Popup. Všimněte si, že PlacementRectangle nevytváří viditelný prvek v aplikaci; příklad vytvoří Rectangle k reprezentaci 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>
Následující obrázek znázorňuje výsledek předchozího příkladu.
Počátek cíle a bod zarovnání pro vyskakovací okno
Cílový počáteční bod a zarovnávací bod jsou referenční body na cílové oblasti a v automaticky otevíraném okně, které se používají pro umístění. K posunu překryvné plochy od cílové oblasti můžete použít vlastnosti HorizontalOffset a VerticalOffset. HorizontalOffset a VerticalOffset jsou relativní vzhledem k cílovému počátku a zarovnávacímu bodu vyskakovacího okna. Hodnota Placement vlastnosti určuje, kde se nachází cílový počáteční a místní zarovnávací bod.
Následující příklad vytvoří Popup a nastaví HorizontalOffset a VerticalOffset vlastnosti na 20. Vlastnost Placement je nastavena na Bottom (výchozí), takže cílovým počátkem je levý dolní roh cílové oblasti a zarovnávacím bodem vyskakovacího okna je levý horní roh objektu 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>
Následující obrázek znázorňuje výsledek předchozího příkladu.
–
Jak vlastnosti spolupracují
Hodnoty PlacementTarget, PlacementRectanglea Placement musí být považovány za společně, aby bylo možné zjistit správnou cílovou oblast, cílový původ a počáteční zarovnávací bod. Pokud je například hodnota PlacementMouse, neexistuje žádný cílový objekt, PlacementRectangle bude ignorována a cílová oblast je hranice ukazatele myši. Na druhou stranu, pokud Placement je Bottom, PlacementTarget nebo nadřazený určuje cílový objekt a PlacementRectangle určuje cílovou oblast.
Následující tabulka popisuje cílový objekt, cílovou oblast, cílový původ a zarovnávací bod vyskakovacího okna a uvádí, zda se PlacementTarget a PlacementRectangle používají či nikoliv pro každou PlacementMode hodnotu výčtu.
| Režim umístění | Cílový objekt | Cílová oblast | Cílový původ | Vyskakovací bod zarovnání |
|---|---|---|---|---|
| Absolute | Nelze použít. PlacementTarget se ignoruje. | Obrazovka nebo PlacementRectangle pokud je nastavená. PlacementRectangle je relativní k obrazovce. | Levý horní roh cílové oblasti. | Levý horní roh Popup. |
| AbsolutePoint | Nelze použít. PlacementTarget se ignoruje. | Obrazovka nebo PlacementRectangle pokud je nastavená. PlacementRectangle je relativní k obrazovce. | Levý horní roh cílové oblasti. | Levý horní roh Popup. |
| Bottom | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Levý dolní roh cílové oblasti. | Levý horní roh Popup. |
| Center | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Střed cílové oblasti. | Střed Popup. |
| Custom | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Definováno podle CustomPopupPlacementCallback. | Definováno podle CustomPopupPlacementCallback. |
| Left | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Levý horní roh cílové oblasti. | Pravý horní roh Popup. |
| Mouse | Nelze použít. PlacementTarget se ignoruje. | Rozsah kurzoru myši. PlacementRectangle se ignoruje. | Levý dolní roh cílové oblasti. | Levý horní roh Popup. |
| MousePoint | Nelze použít. PlacementTarget se ignoruje. | Rozsah kurzoru myši. PlacementRectangle se ignoruje. | Levý horní roh cílové oblasti. | Levý horní roh Popup. |
| Relative | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Levý horní roh cílové oblasti. | Levý horní roh Popup. |
| RelativePoint | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Levý horní roh cílové oblasti. | Levý horní roh Popup. |
| Right | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Pravý horní roh cílové oblasti. | Levý horní roh Popup. |
| Top | PlacementTarget nebo rodič. | Cílový objekt nebo PlacementRectangle pokud je nastavený. Je PlacementRectangle relativní vzhledem k cílovému objektu. | Levý horní roh cílové oblasti. | Levý dolní roh Popup. |
Následující ilustrace znázorňují Popup, cílovou oblast, výchozí bod cíle a zarovnávací bod pro každou PlacementMode hodnotu. Na každém obrázku je cílová oblast žlutá a Popup je modrá.
Když se automaticky otevírané okno setká s okrajem obrazovky
Z bezpečnostních důvodů Popup nemůže být skryta okrajem obrazovky. Když narazíte na Popup okraj obrazovky, stane se jedna z následujících tří věcí:
Automaticky otevírané okno se zarovná podle okraje obrazovky, který by zakryl Popup.
Vyskakovací okno používá jiný bod zarovnání.
Vyskakovací okno používá jiný cílový původ adresy a bod zarovnání.
Tyto možnosti jsou popsány dále v této části.
Chování Popup, když narazí na hranu obrazovky, závisí na hodnotě vlastnosti Placement a na tom, na kterou hranu obrazovky vyskakovací okno narazí. Následující tabulka shrnuje chování Popup, když narazí na okraj obrazovky pro každou hodnotu PlacementMode.
| Režim umístění | Horní okraj | Dolní okraj | Levý okraj | Pravý okraj |
|---|---|---|---|---|
| Absolute | Zarovná se k hornímu okraji. | Zarovná se k dolnímu okraji. | Zarovná se k levému okraji. | Zarovná se k pravému okraji. |
| AbsolutePoint | Zarovná se k hornímu okraji. | Zarovnávací bod vyskakovacího okna se změní na levý dolní roh Popup. | Zarovná se k levému okraji. | Bod zarovnání vyskakovacího okna se změní do pravého horního Popup rohu. |
| Bottom | Zarovná se k hornímu okraji. | Cílový původ se změní na levý horní roh cílové oblasti a bod zarovnání vyskakovacího okna se změní na levý dolní roh Popup. | Zarovná se k levému okraji. | Zarovná se k pravému okraji. |
| Center | Zarovná se k hornímu okraji. | Zarovná se k dolnímu okraji. | Zarovná se k levému okraji. | Zarovná se k pravému okraji. |
| Left | Zarovná se k hornímu okraji. | Zarovná se k dolnímu okraji. | Cílový počátek se změní na pravý horní roh cílové oblasti a zarovnávací bod vyskakovacího okna se změní na levý horní roh Popup. | Zarovná se k pravému okraji. |
| Mouse | Zarovná se k hornímu okraji. | Původ cíle se změní na levý horní roh cílové oblasti (hranice ukazatele myši) a zarovnávací bod v místě vyskakovacího okna se změní na levý dolní roh Popup. | Zarovná se k levému okraji. | Zarovná se k pravému okraji. |
| MousePoint | Zarovná se k hornímu okraji. | Zarovnávací bod vyskakovacího okna se změní na levý dolní roh Popup. | Zarovná se k levému okraji. | Bod zarovnání vyskakovacího okna se změní na pravý horní roh okna. |
| Relative | Zarovná se k hornímu okraji. | Zarovná se k dolnímu okraji. | Zarovná se k levému okraji. | Zarovná se k pravému okraji. |
| RelativePoint | Zarovná se k hornímu okraji. | Zarovnávací bod vyskakovacího okna se změní na levý dolní roh Popup. | Zarovná se k levému okraji. | Bod zarovnání vyskakovacího okna se změní na pravý horní roh okna. |
| Right | Zarovná se k hornímu okraji. | Zarovná se k dolnímu okraji. | Zarovná se k levému okraji. | Cílový původ se změní na levý horní roh cílové oblasti a bod zarovnání vyskakovacího okna se změní na pravý horní roh Popup. |
| Top | Cílový původ se posune na levý dolní roh cílové oblasti, a bod zarovnání se posune na levý horní roh Popup. Ve skutečnosti je to stejné jako v případě , že Placement je Bottom. | Zarovná se k dolnímu okraji. | Zarovná se k levému okraji. | Zarovná se k pravému okraji. |
Zarovnání k okraji obrazovky
A Popup se může zarovnat k okraji obrazovky tím, že se přemístí tak, aby byl celý Popup viditelný na obrazovce. V takovém případě se vzdálenost mezi cílovým počátkem a bodem zarovnání vyskakovacího okna může lišit od hodnot HorizontalOffset a VerticalOffset. Pokud Placement je hodnota Absolute, Centernebo Relative, zarovná se k každému Popup okraji obrazovky. Předpokládejme například, že Popup má Placement nastaveno na Relative a VerticalOffset nastaveno na 100. Pokud dolní okraj obrazovky skryje celý nebo část Popup, Popup přemístí se podél dolního okraje obrazovky, pokud je svislá vzdálenost mezi cílovým bodem a bodem zarovnání menší než 100. Na následujícím obrázku je znázorněno toto.
Změna bodu zarovnání vyskakovacího okna
Pokud je Placement, AbsolutePoint, RelativePoint nebo MousePoint, bod zarovnání automaticky otevíraného okna se změní, když se okno setká s dolním nebo pravým okrajem obrazovky.
Následující obrázek ukazuje, že když dolní okraj obrazovky skryje celé nebo část Popup, místní zarovnávací bod je levý dolní roh Popup.
Následující obrázek znázorňuje, že když je Popup skrytý okrajem pravé obrazovky, zarovnávací bod vyskakovacího okna je v pravém horním rohu Popup.
Pokud Popup narazí na dolní a pravý okraj obrazovky, bodem zarovnání vyskakovacího okna je pravý dolní roh Popup.
Změna cílového počátku a bodu zarovnání vyskakovacího okna
Pokud je Placement, Bottom, Left, Mouse, Right nebo Top zjištěn, změní se cílový počátek a bod zarovnání místního okna, pokud narazí na určitou hranu obrazovky. Okraj obrazovky, který způsobí změnu pozice, závisí na hodnotě PlacementMode .
Následující obrázek ukazuje, že když Placement je Bottom a Popup narazí na dolní okraj obrazovky, výchozí bod pro zarovnání je levý horní roh cílové oblasti a zarovnávací bod vyskakovacího okna je levý dolní roh Popup.
Následující obrázek ukazuje, že když Placement je Left a Popup narazí na levý okraj obrazovky, cílový bod původ je pravý horní roh cílové oblasti a bod zarovnání vyskakovacího okna je levý horní roh Popup.
Následující obrázek ukazuje, že když Placement je Right a Popup narazí na pravý okraj obrazovky, počáteční bod je levý horní roh cílové oblasti a zarovnávací bod je pravý horní roh Popup.
Následující obrázek ukazuje, že když Placement je Top a Popup narazí na horní okraj obrazovky, počátek cílové oblasti je levý dolní roh cílové oblasti a zarovnávací bod vyskakovacího okna je levý horní roh Popup.
Následující ilustrace ukazuje, že když je PlacementMouse a Popup narazí na spodní okraj obrazovky, cílový bod původu se nachází v levém horním rohu cílové oblasti (hranice ukazatele myši) a zarovnávací bod v levém dolním rohu Popup.
Přizpůsobení umístění vyskakovacího okna
Cílový bod a vyskakovací bod zarovnání můžete přizpůsobit nastavením vlastnosti Placement na Custom. Pak definujte delegáta CustomPopupPlacementCallback, který vrací sadu možných bodů pro umístění uspořádanou podle preferencí a primární osy pro Popup. Bod, který ukazuje největší část vybrané oblasti Popup . Poloha Popup se automaticky upraví, pokud je Popup skryto okrajem obrazovky. Příklad najdete v tématu Určení vlastní pozice místní nabídky.
Viz také
.NET Desktop feedback