是否可以在没有xaml的情况下打开WPF IneractionRequest(Prism)?
在xaml中,通常必须在InteractionTriggers中有一个InteractionRequestTrigger,但我很好奇是否有一种方法可以在代码隐藏中完成所有这些。我已经启动并运行了一些代码,但我认为问题在于没有设置InteractionRequest中引发的事件 我相信你们中的许多人都想问“你们为什么要这样做?”但请暂时忽略这个问题是否可以在没有xaml的情况下打开WPF IneractionRequest(Prism)?,wpf,prism,Wpf,Prism,在xaml中,通常必须在InteractionTriggers中有一个InteractionRequestTrigger,但我很好奇是否有一种方法可以在代码隐藏中完成所有这些。我已经启动并运行了一些代码,但我认为问题在于没有设置InteractionRequest中引发的事件 我相信你们中的许多人都想问“你们为什么要这样做?”但请暂时忽略这个问题 private void OnInteractionRequestEvent(InteractionRequestEventInfo info
private void OnInteractionRequestEvent(InteractionRequestEventInfo info)
{
lock (_irLock)
{
var ir = new InteractionRequest<INotification>();
InteractionRequestTrigger irt = new InteractionRequestTrigger();
PopupNotificationAction pna = new PopupNotificationAction();
pna.ElementToParent = info.Parent;
pna.CenterOverAssociatedObject = true;
pna.IsModal = true;
pna.WindowContent = info.View;
irt.Actions.Add(pna);
irt.SourceObject = ir;
ir.Raise(info.Notification, info.Callback);
}
}
私有void OnInteractionRequestEvent(InteractionRequestEventInfo)
{
锁(_irLock)
{
var ir=新的InteractionRequest();
InteractionRequestTrigger irt=新的InteractionRequestTrigger();
PopupNotificationAction pna=新的PopupNotificationAction();
pna.ElementToParent=info.Parent;
pna.CenterOverAssociatedObject=true;
pna.IsModal=true;
pna.WindowContent=info.View;
irt.Actions.Add(pna);
irt.SourceObject=ir;
ir.Raise(信息通知、信息回调);
}
}
这就是我目前所拥有的。PopupNotificationAction是我们编写的,在以正常方式与xaml一起使用时可以工作。它来自PopupWindowAction因此,为了使其正常工作,我做了以下更改:
private void OnInteractionRequestEvent(InteractionRequestEventInfo info)
{
var ir = new InteractionRequest<INotification>();
InteractionRequestTrigger irt = new InteractionRequestTrigger();
PopupNotificationAction pna = new PopupNotificationAction();
pna.ElementToParent = info.Parent;
pna.CenterOverAssociatedObject = true;
pna.IsModal = true;
pna.WindowContent = info.View;
irt.Actions.Add(pna);
irt.Attach(parent); // added
irt.SourceObject = ir;
ir.Raise(info.Notification, () =>
{
try
{
info.Callback()
}
catch
{
// exception handling
}
finally
{
irt.Detach(); // added
}
);
}
私有void OnInteractionRequestEvent(InteractionRequestEventInfo)
{
var ir=新的InteractionRequest();
InteractionRequestTrigger irt=新的InteractionRequestTrigger();
PopupNotificationAction pna=新的PopupNotificationAction();
pna.ElementToParent=info.Parent;
pna.CenterOverAssociatedObject=true;
pna.IsModal=true;
pna.WindowContent=info.View;
irt.Actions.Add(pna);
irt.Attach(父项);//已添加
irt.SourceObject=ir;
ir.Raise(信息通知,()=>
{
尝试
{
info.Callback()
}
抓住
{
//异常处理
}
最后
{
irt.Detach();//已添加
}
);
}
那么,是什么让你认为这是一个好主意?(这与“why you do this”不同!)你有没有收到任何错误?没有错误。什么都没有发生。why试图对所有交互请求实现一个单一的入口点。如果你使用WPF,而你不想使用XAML,这其中的哪一部分提供了一个UI(用户交互)?你在那里用什么?我想你必须把这样的东西发挥出来。看看这里()。如果他们能在单元测试中实现这一点,你就可以让它以你想要的方式工作。你可能只需要以不同的方式处理它。我猜想,InteractionRequestTrigger
的设计目的是,除非它附加到某个对象上(因为它是一个附加的触发器),否则它不会做任何事情。首先,我会尝试将它附加到某个对象(可能是irt.attach(this)
)。请注意,如果您只执行一次,而不是每次请求交互时都这样做会更好—这至少是在XAML中执行时的结果。