屏幕上的弹出尺寸

时间:2016-11-13 11:30:58

标签: c# wpf popup

我以为我理解了WPF内容扩展系统,但遇到了一个对我来说神秘的问题。我有一个非常简单的弹出窗口,应该用作当用户点击图像时在图像顶部打开的放大镜。 XAML是这样的:

    <Popup Name="LoupePopup" AllowsTransparency="True" IsOpen="False" StaysOpen="True">
        <Border BorderThickness="2" BorderBrush="Azure" />
    </Popup>

在后面的代码中,然后我将弹出窗口的位置绑定到弹出窗口打开时已显示的图像。我使用以下代码将放大镜尺寸设置为图像大小的一半:

    LoupePopup.PlacementTarget = FullImg;
    LoupePopup.Placement = PlacementMode.Relative;
    LoupePopup.Width = FullImg.ActualWidth / 2;
    LoupePopup.Height = FullImg.ActualHeight / 2;

然后进一步的代码随着MouseMove移动放大镜,但这与这里的问题没有关系:我希望放大镜正好是图像宽度/高度的一半,但事实并非如此 - 它是相当的稍大一点(约18%)。我验证了实际图像大小和显示它的窗口的实际大小,以及鼠标坐标。这些尺寸/点坐标都很有意义,但为什么弹出窗口不会使用与其他元素相同的宽度/高度缩放?

澄清:图像覆盖屏幕的80%左右,因此这不仅仅是几个像素的问题。该窗口是一个用代码创建的子窗口,弹出窗口在主窗口的XAML中定义,但两个窗口都设置为全屏大小。

欣赏你的想法!

3 个答案:

答案 0 :(得分:0)

也许是这样,因为在计算LoupePopup尺寸时没有考虑边界厚度 或弹出窗口或图像的默认边距和填充

答案 1 :(得分:0)

我不确定,但我认为您应该查看图片的Stretch属性。如果在图像上定义了宽度和高度,则ActualWidth / -Height会受到“拉伸”属性的影响。将其设置为Fill会使ActualWidth / -Height等于定义的宽度和高度。

答案 2 :(得分:0)

在尝试了更多选项后,我不得不意识到,与主窗口方面相比,导致了这个问题。图像显示在子窗口中;弹出窗口在主窗口中定义。将弹出窗口XAML移动到子窗口后,弹出尺寸是正确的。

不确定我理解为什么(两个窗口都有全屏尺寸,而 应该使用相同的缩放比例,但至少这解决了我的问题。感谢您的帮助!