Stiamo sviluppando un controllo dell'interfaccia utente in WPF da consumare all'interno di un motore di applicazione Windows Form/MFC esistente (Rhino 3D).WPF TextBox che non accetta Input quando si trova in ElementHost in Window Form
Il motore dell'applicazione espone la possibilità di creare una "Dockbar" che essenzialmente consente di inserire i controlli di Windows Form all'interno di una finestra secondaria che può ancorare all'interfaccia di Engines.
Sto tentando di inserire un semplice TextBox WPF all'interno di un controllo ElementHost, che viene aggiunto alla Dockbar. Questo sembra funzionare bene a prima vista; ma dopo aver tentato di digitare nel TextBox solo alcune sequenze appaiono effettivamente nel TextBox. Il DELETE, BACKSPACE, COPIA, PASTA, e selezione del testo lavoro. Se si digita A-Z, 1-9, ecc. Questi tasti non vengono visualizzati.
Ho perlustrato la rete, e ho sentito parlare la ElementHost.EnableModelessKeyboardInterop()
, ma questo vale solo per WPF di Windows viene creato dal modulo. Sto solo creando UserControls di WPF e li sto ospitando nel controllo ElementHost.
ho visto un post, che ha parlato del Dispatcher.Run(), ed è una sorta di opere, ma rompe il resto del modulo:
System.Windows.Threading.Dispatcher.Run();
Il PreviewKeyUp, PreviewKeyDown, TastoSu e gli eventi KeyDown si attivano tutti sul TextBox, ma purtroppo non viene visualizzato alcun testo nel TextBox.
Non so molto sui messaggi di Windows, ma usando WinSpector ho notato che nessun messaggio WM_GETTEXT proveniva dal TextBox (se anche dovessero essere non lo so).
Ho anche creato un nuovo progetto Windows Form e ho fatto la stessa cosa e funziona perfettamente, quindi deve essere un problema con il modo in cui le finestre vengono create e ancorate nel motore di Rhino 3D.
Ecco il codice di esempio che non funziona:
ElementHost el = new ElementHost();
System.Windows.Controls.TextBox t = new System.Windows.Controls.TextBox();
t.Width = 100;
t.Text = "TEST";
el.Child = t;
panel1.Controls.Add(el);
Grazie, questo era esattamente ciò di cui avevo bisogno. L'ho inserito in UserControl, come suggerito da IvanH di seguito. Funziona come un fascino! –
Grazie! Questo è diventato un problema per noi oggi e questo lo ha risolto rapidamente! –