WPF Edrawings API Touch ⇐ C#
-
Гость
WPF Edrawings API Touch
У меня проблема с сенсорным экраном и API Edrawings. Когда я открываю рисунок через приложение WPF, я могу увеличить его с помощью мыши или изменить его положение. Однако когда я использую сенсорный экран, программа вылетает без каких-либо сообщений об ошибках.
На выходной консоли я получил следующее сообщение:
Программа «[24400] Eworks.exe» завершилась с кодом -1073740771 (0xc000041d).
На дисплее событий я получил следующие сообщения:
- 1002 0 2 101 0 0x80000000000000 898929 Приложение - explorer.exe 10.0.19041.1151 2c2c 01d7997d4aa8dd54 0 C:\Windows\explorer.exe 2194d896-a6eb-44ae-922b-5493078757d5 Неизвестно 55006E006B006E006F0077006E0000000000 - - 1001 0 4 0 0 0x80000000000000 898930 Приложение - 0 AppHangB1 Нет информации 0 explorer.exe 10.0.19041.1151 2885d2b8 386f 134217728 \\?\C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppHang_explorer.exe_2f9ae071b05019eff185369cb5f5be6bc3de762d_bb0dc81a_af848be8-8f02-42d7-b872-bda237bf42e4 0 2194d896-a6eb-44ae-922b-5493078757d5 4 0 ´´´´ Мой код реализации в WPF:
Реализован eDrawings.Interop.EModelViewControl.dll
публичный частичный класс EdrawingsHostControl: UserControl { частный EModelViewControl m_Ctrl; общедоступный EdrawingsHostControl() { ИнициализироватьКомпонент(); вар хост = новый WindowsFormsHost (); вар Ctrl = новый EdrawingsHost (); ctrl.ControlLoaded += OnControlLoaded; хост.Ребенок = Ctrl; this.Content = хост; } общедоступная строка FilePath { получить {возврат (строка) GetValue (FilePathProperty); } set { SetValue (FilePathProperty, значение); } } общедоступный статический только для чтения DependencyProperty FilePathProperty = DependencyProperty.Register(nameof(FilePath), typeof(string), typeof(EdrawingsHostControl), new FrameworkPropertyMetadata(OnFilePathPropertyChanged)); Private static void OnFilePathPropertyChanged (DependencyObject d, DependencyPropertyChangedEventArgs e) { (d как EdrawingsHostControl).OpenFile(e.NewValue как строка); } частная пустота OpenFile (строка filePath) { пытаться { если (m_Ctrl == ноль) { throw new NullReferenceException("Элемент управления eDrawings не загружен"); } if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) { m_Ctrl.CloseActiveDoc(""); } еще { m_Ctrl.OpenDoc(filePath, false, false, true, ""); } } поймать (Исключение e) { MessageBox.Show(e.ToString()); } } частная пустота OnControlLoaded (EModelViewControl ctrl) { m_Ctrl = Ctrl; m_Ctrl.OnFinishedLoadingDocument += OnFinishedLoadingDocument; m_Ctrl.OnFailedLoadingDocument += OnFailedLoadingDocument; } Private void OnFailedLoadingDocument (строка fileName, int errorCode, строка errorString) { Trace.WriteLine($"{fileName} не удалось загрузить: {errorString}"); } частная пустота OnFinishedLoadingDocument (строковое имя файла) { Trace.WriteLine($"{fileName} загружен"); } } общедоступный класс EdrawingsHost: AxHost { публичное событие Action ControlLoaded; частный bool m_IsLoaded; public EdrawingsHost() : base("22945A69-1191-4DCF-9E6F-409BDE94D101") { m_IsLoaded = ложь; } защищенное переопределение void OnCreateControl() { base.OnCreateControl(); если (!m_IsLoaded) { m_IsLoaded = правда; вар ctrl = this.GetOcx() как EModelViewControl; ControlLoaded?.Invoke(ctrl); } } } файл xaml:
Кто-нибудь знает, в чем может быть проблема?
У меня проблема с сенсорным экраном и API Edrawings. Когда я открываю рисунок через приложение WPF, я могу увеличить его с помощью мыши или изменить его положение. Однако когда я использую сенсорный экран, программа вылетает без каких-либо сообщений об ошибках.
На выходной консоли я получил следующее сообщение:
Программа «[24400] Eworks.exe» завершилась с кодом -1073740771 (0xc000041d).
На дисплее событий я получил следующие сообщения:
- 1002 0 2 101 0 0x80000000000000 898929 Приложение - explorer.exe 10.0.19041.1151 2c2c 01d7997d4aa8dd54 0 C:\Windows\explorer.exe 2194d896-a6eb-44ae-922b-5493078757d5 Неизвестно 55006E006B006E006F0077006E0000000000 - - 1001 0 4 0 0 0x80000000000000 898930 Приложение - 0 AppHangB1 Нет информации 0 explorer.exe 10.0.19041.1151 2885d2b8 386f 134217728 \\?\C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppHang_explorer.exe_2f9ae071b05019eff185369cb5f5be6bc3de762d_bb0dc81a_af848be8-8f02-42d7-b872-bda237bf42e4 0 2194d896-a6eb-44ae-922b-5493078757d5 4 0 ´´´´ Мой код реализации в WPF:
Реализован eDrawings.Interop.EModelViewControl.dll
публичный частичный класс EdrawingsHostControl: UserControl { частный EModelViewControl m_Ctrl; общедоступный EdrawingsHostControl() { ИнициализироватьКомпонент(); вар хост = новый WindowsFormsHost (); вар Ctrl = новый EdrawingsHost (); ctrl.ControlLoaded += OnControlLoaded; хост.Ребенок = Ctrl; this.Content = хост; } общедоступная строка FilePath { получить {возврат (строка) GetValue (FilePathProperty); } set { SetValue (FilePathProperty, значение); } } общедоступный статический только для чтения DependencyProperty FilePathProperty = DependencyProperty.Register(nameof(FilePath), typeof(string), typeof(EdrawingsHostControl), new FrameworkPropertyMetadata(OnFilePathPropertyChanged)); Private static void OnFilePathPropertyChanged (DependencyObject d, DependencyPropertyChangedEventArgs e) { (d как EdrawingsHostControl).OpenFile(e.NewValue как строка); } частная пустота OpenFile (строка filePath) { пытаться { если (m_Ctrl == ноль) { throw new NullReferenceException("Элемент управления eDrawings не загружен"); } if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)) { m_Ctrl.CloseActiveDoc(""); } еще { m_Ctrl.OpenDoc(filePath, false, false, true, ""); } } поймать (Исключение e) { MessageBox.Show(e.ToString()); } } частная пустота OnControlLoaded (EModelViewControl ctrl) { m_Ctrl = Ctrl; m_Ctrl.OnFinishedLoadingDocument += OnFinishedLoadingDocument; m_Ctrl.OnFailedLoadingDocument += OnFailedLoadingDocument; } Private void OnFailedLoadingDocument (строка fileName, int errorCode, строка errorString) { Trace.WriteLine($"{fileName} не удалось загрузить: {errorString}"); } частная пустота OnFinishedLoadingDocument (строковое имя файла) { Trace.WriteLine($"{fileName} загружен"); } } общедоступный класс EdrawingsHost: AxHost { публичное событие Action ControlLoaded; частный bool m_IsLoaded; public EdrawingsHost() : base("22945A69-1191-4DCF-9E6F-409BDE94D101") { m_IsLoaded = ложь; } защищенное переопределение void OnCreateControl() { base.OnCreateControl(); если (!m_IsLoaded) { m_IsLoaded = правда; вар ctrl = this.GetOcx() как EModelViewControl; ControlLoaded?.Invoke(ctrl); } } } файл xaml:
Кто-нибудь знает, в чем может быть проблема?
Мобильная версия