Windows 7上的弹出窗口位置错误,在Windows 8上更正

时间:2014-02-24 16:45:56

标签: wpf

这是我第5次更改此代码时,每当它在Windows 7上看起来正确时,Windows 8上的弹出位置就会消失,反之亦然。我不知道这是打电话的顺序还是别的。

Button b = (Button)sender;
Popup1.Placement = PlacementMode.Left;
Popup1.PlacementTarget = b;
Popup1.HorizontalOffset = b.RenderSize.Width; //original button shall be covered with popup
Popup1.VerticalOffset = 0;
Popup1.IsOpen = true;

始终水平偏移。我也试过Popup1.HorizontalOffset = b.ActualWidth;

2 个答案:

答案 0 :(得分:0)

在Windows 8下有一个平板电脑设置会影响弹出窗口的放置,您可以将其设置为另一个放置模式。它被称为Handedness,应确保弹出窗口不会出现在用户手中。我还没有遇到这个问题,但还有其他人有:

w8 default tablet settings conflicts with WPF layout

windows 8 popup location

WPF Handedness with Popups

尤其是最后一个链接可以解决您的问题。

答案 1 :(得分:0)

我认为这解决了它:

我将Popup展示位置设置为自定义。 在init之后我添加了

Popup1.CustomPopupPlacementCallback += popupFix;

CustomPopupPlacement[] popupFix(Size popupSize, Size targetSize, Point p)
{
   p.Y = p.Y - 12; //my fake shadow offset
   p.X = p.X - 12; //my fake shadow offset
   return new CustomPopupPlacement[] {
     new CustomPopupPlacement(p, PopupPrimaryAxis.Horizontal)
   };
}

在该自定义Horizo​​ntalOffset工作之后。