EnableCollectionSynchronization zmienia rozmiar okna i czcinek

0

Witajcie,
Próbuję zrozumieć BindingOperations.
Logika programu działa bez zarzutu, ale w momencie gdy w podrzędnym oknie pierwszy raz wywołuję EnableCollectionSynchronization(collection, lock) wszystkie okna włącznie z głównym (nadrzędnym), zmniejszają rozmiary okna oraz rozmiar czcionek w stosunku do zaprojektowanych. Okno nadrzędne, które ma ustawione WindowState: Maximixed skaluje się do 3/4 ekranu.
Próbowałem nawet proste przykłady z sieci dla "observable collection" i zawsze przy pierwszym uruchomieniu EnableCollectionSynchronization dzieje się tak samo - zmiana rozmiaru i czcionek.
Dlaczego EnableCollectionSynchronization oddziałuje na wszystkie okna skoro w parametrach podaję konkretną kolekcję? Czego nie wiem? Jest jakaś możliwość zablokowania tego "ogólnego" oddziaływania?
Poradźcie proszę

0
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog();
        }
    }

public partial class Form2 : Form
    {
        private ObservableCollection<string> collection;

        private object _lock = new object();

        public Form2()
        {
            InitializeComponent();

            collection = new ObservableCollection<string>();
            collection.CollectionChanged += HandleChange;

            BindingOperations.EnableCollectionSynchronization(collection, _lock);
        }

        private void HandleChange(object sender, NotifyCollectionChangedEventArgs e)
        {
        }
    }
0

ObservableCollection i EnableCollectionSynchronization to są mechanizmy pochodzące z WPF, a Ty piszesz w WinForms ...

0
neves napisał(a):

ObservableCollection i EnableCollectionSynchronization to są mechanizmy pochodzące z WPF, a Ty piszesz w WinForms ...

Dzięki neves za podpowiedź. Podrzuciłeś mi myśl o co pytać googla i już się douczam.
Dla mnie środowiskiem naturalnym jest WinForms, ale zabrakło mi tego elementu i próbuję zrobić hybrydę WF z WPF.

0

OK. Znalazłem że winna jest zmiana CurrentAutoScaleDimension z (96, 96) na (120, 120), po wywołaniu EnableCollectionSynchronization.
Teraz pytanie jak tego uniknąć...

0

Poniższe załatwia sprawę,.choć wygodniejsze wydaje się SetProcessDpiAwarenessContext().

https://stackoverflow.com/questions/50239138/dpi-awareness-unaware-in-one-release-system-aware-in-the-other?noredirect=1&lq=1

If an third-party/external component, which references a WPF assemblies, redefines the DPI-Awareness status of an application, this automatic behaviour can be disabled, inserting a paramert in the Project Assemblyinfo.cs:

[assembly: System.Windows.Media.DisableDpiAwareness]

Zamykam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1