Форма AX с управлением управляемым хостом WPF не может быть открыта во второй раз - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь создать форму AX с управляющим элементом управления WPF.

Форма открывается нормально с первого раза, но если я закрываю ее и пытаюсь открыть снова, ничего не происходит (сообщение об ошибке не появляется, он просто ничего не делает)

Я что-то упустил?

Вот мой код:

AX:

public class FormRun extends ObjectRun
{
    SEP_Documentation.Customer  documentationControl;
    CustTable                   custTable;
}

public void init()
{    
    super();

    if (element.args().record())
    {
        custTable = element.args().record();
    }

    documentationControl = CustomerDocumentation.control();
    documentationControl.set_AXLanguage(new xInfo().language());
    documentationControl.set_User(curUserId());
    documentationControl.set_CustomerId(custTable.AccountNum);

    documentationControl.Init();
}

WPF:

public partial class Customer : UserControl
    {
        public string CustomerId { get; set; }
        public string User { get; set; }
        public string AXLanguage { get; set; }

        public Customer()
        {
            InitializeComponent();

            this.CustomerDocuments.SelectionChanged += (obj, e) => Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => this.CustomerDocuments.UnselectAll()));
        }

        public void Init()
        {
            IEnumerable<APICustomerDocumentModel> documents = APIDocumentationRepository.GetCustomerDocuments(CustomerId, User, AXLanguage);

            this.CustomerDocuments.ItemsSource = documents;

            Thread.CurrentThread.CurrentCulture = new CultureInfo(AXLanguage);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(AXLanguage);
            FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
        }

        private void DocumentNameClick(object sender, RoutedEventArgs e)
        {
            Hyperlink link = (Hyperlink)e.OriginalSource;
            Process.Start(link.NavigateUri.AbsoluteUri);
        }
    }

1 Ответ

1 голос
/ 20 мая 2019

Я обнаружил проблему:

Я добавляю попытку уловки в форме AX:

try
{
    ...
}
catch (Exception::CLRError)
{
    ex = ClrInterop::getLastException();
    if (ex != null)
    {
        ex = ex.get_InnerException();
        if (ex != null)
        {
            error(ex.ToString());
        }
    }
}

Затем я смог увидеть, где была проблема: исключение произошло в этой строке в моем пользовательском элементе управления WPF:

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

Полагаю, пользовательский элемент управления не полностью закрывается при закрытии формы в AX, поэтому возникла исключительная ситуация, когда метаданные переопределения уже были сделаны.

...