Como señala Andrei, este comportamiento se encuentra en el interior del control Popup
y es difícil de superar. Si está dispuesto a hacer algún trabajo, puede hacerlo cambiando el tamaño y traduciendo el contenido de la ventana emergente cuando alcanza los bordes de la pantalla. Para los propósitos de la demostración, nos enfocaremos en el borde izquierdo de la pantalla.
Si tenemos un poco de XAML como esto:
<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>
y de código subyacente de esta manera:
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;
}
continuación, calculando que el Popup
sería fuera de la pantalla, podemos reducir el ancho del contenido y darle un margen negativo para que la porción que está en pantalla se recorta a lo que habría aparecido si el Popup
fuera a permitir esto.
Esto debería extenderse para ocuparse de los cuatro bordes de la pantalla y la posibilidad de pantallas múltiples, pero demuestra que el enfoque es factible.
Esta solución no funciona para mí. Cuando muevo mi ventana emergente cerca del borde de la pantalla, se reposiciona en consecuencia independientemente del contenedor Canvas. Probé un objetivo de ubicación entre iguales, así como el uso del padre predeterminado. – Brannon