在WPF ContextMenu中使用当前显示比例

时间:2019-07-08 13:34:56

标签: wpf

我的WPF应用程序具有Per-Monitor Aware功能,并且通常可以很好地扩展。但是,当应用程序窗口位于比例为150%的第二个监视器上并且我打开上下文菜单时,它将使用主显示中的比例为100%的菜单,因此菜单项非常小:

(有趣的是,子菜单项使用正确的150%比例)

我打开上下文菜单设置IsOpen = true:

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ContextMenu menu = new ContextMenu();

            menu.Items.Add("item 1");
            menu.Items.Add("item 2");

            MenuItem submenu = new MenuItem();
            submenu.Header = "submenu";
            submenu.Items.Add("more 1");
            submenu.Items.Add("more 2");
            menu.Items.Add(submenu);

            menu.IsOpen = true;
        }

如何配置上下文菜单以使用其打开的显示设置,而不是从默认主显示打开?

1 个答案:

答案 0 :(得分:0)

您可以使用RenderTransform取消从PrimaryScreen缩放的比例,并从Visual缩放到dpiScale:

var visual = e.Source as Visual;
if (visual != null)
{
     var dpiScale = VisualTreeHelper.GetDpi(visual);
     System.Windows.Forms.Screen.PrimaryScreen.
           GetDpi(DpiType.Effective, out uint dpiX, out uint dpiY);
     menu.RenderTransform = 
          new ScaleTransform(dpiScale.DpiScaleX / ((double)dpiX / 96), 
                            dpiScale.DpiScaleY / ((double)dpiY / 96));
     menu.IsOpen = true;
}