【问题标题】:Popup position wrong on Windows 7, correct on Windows 8在 Windows 7 上弹出位置错误,在 Windows 8 上更正
【发布时间】:2014-02-24 16:45:55
【问题描述】:

这大约是我第 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;

【问题讨论】:

    标签: wpf


    【解决方案1】:

    windows 8 下有一个 tablet 设置会影响弹窗的 Placement,你可以设置它来获取另一个 PlacementMode。这称为惯用手,应确保弹出窗口不会出现在用户的手下。我还没有遇到过这个问题,但是还有其他人遇到过:

    w8 default tablet settings conflicts with WPF layout

    windows 8 popup location

    WPF Handedness with Popups

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

    【讨论】:

    • 谢谢,这似乎是原因,但该链接是我见过的最脏的修复!
    【解决方案2】:

    我认为这解决了它:

    我将弹出窗口位置设置为自定义。 初始化后我添加了

    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 工作之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2012-10-11
      • 2015-03-30
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多