Как я могу справиться с масштабированием Windows из WinForm со встроенным WPF UserControl (который был создан с ленты надстройки Excel VSTO)? - PullRequest
1 голос
/ 17 апреля 2019

Контекст

У нас проблема с функцией масштабирования Windows (100%, 125%, 150% ...) и нашей WinForm.Мы создаем наш WinForm из надстройки Excel VSTO, и каждый WinForm содержит один компонент, который представляет собой UserControl (WFP), размещенный с ElementHost в WinForm.

Каждый UserControl встраивает всенеобходимые компоненты, с подходом MVVM.

Проблема возникает только тогда, когда у пользователя есть два экрана, а главный экран имеет масштаб увеличения 100%, а дополнительный экран имеет значение 125% или более.

enter image description here

Excel Ribbon.cs

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    var form = new MainForm();
    form.Show();
}

MainForm.cs

public MainForm()
{
    this.InitializeComponent();
    this.MainUserControl = new MainUserControl();
    this.Controls.Add(new ElementHost 
    { 
        Dock = DockStyle.Fill, 
        Child = this.MainUserControl 
    });
}

Ожидаемое поведение:

enter image description here

Фактическое поведение:

enter image description here

Проблема возникает только на главном экране (этот экран был установлен на 100% масштаб), но не на втором экране.

Другая информация

Еще один интересный момент: когда мы перемещаем WinForm с основного экрана на второй, он отображается правильно;и затем мы перемещаем его со второго экрана на главный, и это работает.

На этом этапе, если мы пытаемся изменить размер WinForm, он снова ломается.

То, что я уже пробовал:

Прежде всего мы попытались добавить app.manifest и раскомментировать блок DPI Aware

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
</application>

Мы также раскомментируем поддержку совместимости для Windows 10 (все наши соавторы работают под W10,больше не нужно поддерживать)

<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Мы пытаемся добавить два следующих метода в событие запуска Addin, но безрезультатно

System.Windows.Forms.Application.EnableVisualStyles();
System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);

Также у нас есть следующая строкав AssemblyInfo.cs

[assembly: System.Windows.Media.DisableDpiAwareness]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...