为什么此弹出窗口认为它遇到了屏幕边缘?

时间:2018-08-10 20:23:22

标签: c# wpf popup

Popup Placement Behavior Guide显示了如何使用几个属性来放置弹出窗口:

  • 展示位置
  • PlacementTarget
  • PlacmentRectangle
  • 垂直偏移/水平偏移

使用这些,我们可以设置目标区域目标原点放置位置对齐点。该指南继续描述了弹出窗口在遇到屏幕时如何放置的全部条件。

在我的应用程序中,我以编程方式创建了一个弹出窗口以响应用户输入并设置属性:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Popup popup = new Popup();
    popup.Child = new PopupContent();
    popup.Placement = PlacementMode.Right;
    popup.PlacementTarget = redRectangle;

    popup.StaysOpen = false;
    popup.IsOpen = true;
}

预期的行为是弹出窗口将出现在矩形的右侧。相反,我得到了这个:

Incorrect Popup Placement

为什么弹出窗口的放置对齐点会变为矩形的左侧,好像遇到了屏幕的边缘一样?


MVCE资源:

<Window x:Class="PopupTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Width="700" Height="700">
    <Grid>
        <Button Click="Button_Click" Content="Create Popup" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="83" Height="25"/>
        <Rectangle x:Name="redRectangle" Width="20" Height="20" Fill="Red"/>
    </Grid>
</Window>

<UserControl x:Class="PopupTest.PopupContent"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Width="300" Height="300">
    <Border BorderBrush="Black" BorderThickness="2">
        <Border BorderBrush="#FF50A0E0" BorderThickness="10" Background="White">
            <Border BorderBrush="Black" BorderThickness="2" Padding="10">
                <Label Content="Popup!" FontSize="70" VerticalContentAlignment="Center" HorizontalContentAlignment="Center"/>
            </Border>
        </Border>
    </Border>
</UserControl>

0 个答案:

没有答案