如何将PopUpWindow设置为与应用程序在同一监视器上?(xaf)



用户经常在监视器之间移动我的XAF Winforms应用程序。但是,PopUpWindowShowAction调用的对话框仍保留在旧监视器上

这个问题可以在Dev-Express的主Demo中重复出现(尽管要在那里调试它,我认为我需要了解API代码(。

  1. 运行Main Demo并将应用程序窗口移动到第二个监视器
  2. 选择"用户",右键单击用户,然后选择"打印预览">

打印预览将显示在第一个监视器上。

在我类似的情况下,我的控制器是

public partial class JobHeadFilterController : ViewController, IClassicController
{
public JobHeadFilterController()
{
InitializeComponent();
TargetViewNesting = Nesting.Root;
}
protected override void OnActivated()
{
base.OnActivated();
popupWindowShowFilterAction.QuickAccess = true;
}
private void popupWindowShowFilterAction_CustomizePopupWindowParams(object sender,
CustomizePopupWindowParamsEventArgs e)
{
var holder = new JobHeadFilterHolder();
var npProvider = new NonPersistentObjectSpaceProvider(XafTypesInfo.Instance, null);
var os = (NonPersistentObjectSpace)npProvider.CreateObjectSpace();
var view = Application.CreateDetailView(os, holder);
e.View = view;
}

我已尝试浏览CustomizePopupWindowParamsEventArgs的属性,但看不到要设置的内容。

我可以使用获取主表单

var mainform = Application.MainWindow.Template as Form;

我想我需要在popupWindowShowFilterAction_CustomizePopupWindowParams 中执行以下操作

var template = e.Application.MainWindow.Template;
var window = new Window(Application, );  // having trouble figuring out the parameters
e.DialogController.SetWindow(window);

研究文档

[更新]

我试过

var window=e.Application.MainWindow;e.DialogController.SetWindow(窗口(;

但出现错误

"DevExpress.ExpressApp.SystemModule.DialogController"控制器处于活动状态。

我尝试从DevExpress.ExpressApp.SystemModule.DialogController继承我自己的对话框控制器,但遇到了同样的错误。

using System;
using System.Windows.Forms;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Templates;
using DevExpress.ExpressApp.Win.Templates;
namespace MyNameSpace;

public partial class CustomizeFormsWindowController : WindowController
{
public CustomizeFormsWindowController()
{
InitializeComponent();
TargetWindowType = WindowType.Child;
}
protected override void OnActivated()
{
base.OnActivated();
Window.TemplateChanged += WindowsTemplateChanged;
}
private void WindowsTemplateChanged(object sender, EventArgs e)
{
if (Window.Template is Form &&
Window.Template is ISupportStoreSettings)
((ISupportStoreSettings)Window.Template).SettingsReloaded +=
OnFormReadyForCustomizations;
}
private void OnFormReadyForCustomizations(object sender, EventArgs e)
{
if (sender is not PopupForm popupForm) return;
var mainForm = Application.MainWindow.Template as Form;
var X = mainForm.Location.X + (mainForm.Width - popupForm.Width) / 2;
var Y = mainForm.Location.Y + (mainForm.Height - popupForm.Height) / 2;
popupForm.SetDesktopLocation(X, Y);
}
protected override void OnDeactivated()
{
Window.TemplateChanged -= WindowsTemplateChanged;
base.OnDeactivated();
}
}

最新更新