Я не нашел способ передать ссылку, поэтому вместо этого я адаптировал эту мерзость
checkIfParent = e => {
let node = e.target;
while (node) {
if (node.id && node.id === 'ParentId') {
return true;
}
node = node.parentNode;
}
return false;
};
Я наконец-то понял это после 2-х дней разметки головы ...
Диалоговое окно MFC принимало сообщения WM_CHAR
и не позволяло контролю обрабатывать ввод , Поэтому, чтобы предотвратить это, я перехватываю HwndSource, и всякий раз, когда я получаю сообщение WM_GETDLGCODE
, я отвечаю типами входных данных для принятия, а затем отмечаю событие как обработанное.
Я создал свой собственный TextBox для предотвращения необходимости исправления каждого текстового поля (см. Ниже):
/// <summary>
/// Interop Enabled TextBox : This TextBox will properly handle WM_GETDLGCODE Messages allowing Key Input
/// </summary>
class IOTextBox : TextBox
{
private const UInt32 DLGC_WANTARROWS = 0x0001;
private const UInt32 DLGC_WANTTAB = 0x0002;
private const UInt32 DLGC_WANTALLKEYS = 0x0004;
private const UInt32 DLGC_HASSETSEL = 0x0008;
private const UInt32 DLGC_WANTCHARS = 0x0080;
private const UInt32 WM_GETDLGCODE = 0x0087;
public IOTextBox() : base()
{
Loaded += delegate
{
HwndSource s = HwndSource.FromVisual(this) as HwndSource;
if (s != null)
s.AddHook(new HwndSourceHook(ChildHwndSourceHook));
};
}
IntPtr ChildHwndSourceHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_GETDLGCODE)
{
handled = true;
return new IntPtr(DLGC_WANTCHARS | DLGC_WANTARROWS | DLGC_HASSETSEL);
}
return IntPtr.Zero;
}
}
Проверьте мой собственный вопрос об этой же вещи. в конце концов, все, что вам нужно, это что-то вроде этого:
Window window1 = new Window();
ElementHost.EnableModelessKeyboardInterop(window1);
window1.Show();