我正在尝试使用WPF托管主机控件创建AX表单。
第一次正常打开该表单,但是如果我关闭它并尝试重新打开它,则什么也没有发生(没有错误消息出现,它什么也不做)
我想念什么吗?
这是我的代码:
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);
}
}
答案 0 :(得分:1)
我发现了问题:
我在AX表单中添加了一个这样的try catch:
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中关闭表单时用户控件没有完全关闭,所以当覆盖元数据已经完成时会引发异常。