Контекст
У нас проблема с функцией масштабирования Windows (100%, 125%, 150% ...) и нашей WinForm.Мы создаем наш WinForm из надстройки Excel VSTO, и каждый WinForm содержит один компонент, который представляет собой UserControl
(WFP), размещенный с ElementHost
в WinForm.
Каждый UserControl
встраивает всенеобходимые компоненты, с подходом MVVM.
Проблема возникает только тогда, когда у пользователя есть два экрана, а главный экран имеет масштаб увеличения 100%
, а дополнительный экран имеет значение 125%
или более.
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
});
}
Ожидаемое поведение:
Фактическое поведение:
Проблема возникает только на главном экране (этот экран был установлен на 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]