Như Andrei đã chỉ ra, hành vi này nằm sâu bên trong kiểm soát Popup
và khó khắc phục. Nếu bạn sẵn sàng làm một số công việc nó có thể được thực hiện bằng cách thay đổi kích thước và dịch nội dung của cửa sổ bật lên khi nó đạt đến mép màn hình. Đối với mục đích của cuộc biểu tình, chúng tôi sẽ tập trung vào cạnh trái của màn hình.
Nếu chúng ta có một số XAML như thế này:
<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>
và mã-đằng sau như thế này:
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;
}
sau đó bằng cách tính toán rằng Popup
sẽ tắt màn hình, chúng ta có thể làm giảm độ rộng của nội dung và cho nó một lề âm để phần được trên màn hình được cắt bớt thành những gì sẽ xuất hiện nếu Popup
là để cho phép điều này.
Điều này sẽ phải được mở rộng để đối phó với tất cả bốn cạnh của màn hình và khả năng nhiều màn hình, nhưng nó chứng tỏ rằng cách tiếp cận này là hoàn toàn khả thi.
Nguồn
2011-01-08 20:01:32
Giải pháp này không làm việc cho tôi. Khi di chuyển cửa sổ bật lên của tôi gần cạnh màn hình, nó sẽ tự định vị lại cho phù hợp với bất kể vùng chứa Canvas. Tôi đã thử nhắm mục tiêu vị trí ngang hàng cũng như sử dụng cha mẹ mặc định. – Brannon