Come fa notare Andrei, questo comportamento è in profondità all'interno del controllo Popup
e difficile da superare. Se sei disposto a fare del lavoro, puoi farlo ridimensionando e traducendo il contenuto del popup quando raggiunge i bordi dello schermo. Ai fini della dimostrazione, ci concentreremo sul bordo sinistro dello schermo.
Se abbiamo qualche XAML come questo:
<Window ...
LocationChanged="Window_LocationChanged"
SizeChanged="Window_SizeChanged"
>
<Grid>
<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue"/>
<Popup Name="popup1" PlacementTarget="{Binding ElementName=rectangle1}" IsOpen="True" Width="100" Height="100">
<TextBlock Background="White" TextWrapping="Wrap" Width="100" Height="100">
<TextBlock.Text>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</TextBlock.Text>
</TextBlock>
</Popup>
</Grid>
</Window>
e code-behind in questo modo:
private void Window_LocationChanged(object sender, EventArgs e)
{
RefreshPopupPosition();
}
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
RefreshPopupPosition();
}
private void RefreshPopupPosition()
{
var upperLeft = rectangle1.PointToScreen(new Point(0, 100));
var xOffset = Math.Min(0, upperLeft.X);
popup1.Width = xOffset + 100;
(popup1.Child as FrameworkElement).Margin = new Thickness(xOffset, 0, 0, 0);
popup1.HorizontalOffset += 1;
popup1.HorizontalOffset -= 1;
}
poi calcolando che il Popup
sarebbe off-screen, siamo in grado di ridurre la larghezza del contenuto e assegnargli un margine negativo in modo che la porzione sullo schermo sia ritagliata rispetto a ciò che sarebbe apparso se lo Popup
consentisse di farlo.
Questo dovrebbe essere esteso per trattare tutti e quattro i bordi dello schermo e la possibilità di schermi multipli, ma dimostra che l'approccio è praticabile.
fonte
2011-01-08 20:01:32
Questa soluzione non funziona per me. Spostando il mio popup vicino al bordo dello schermo si riposiziona di conseguenza indipendentemente dal contenitore Canvas. Ho provato un obiettivo di posizionamento tra pari e l'utilizzo del genitore predefinito. – Brannon