【发布时间】:2015-06-26 12:07:26
【问题描述】:
我在 WPF 中为我们的小团队制作了一个可重用的控件:一个简单的对话框,我们经常使用它。 窗口的处理是在私有方法中完成的:
private static void ExecuteInternal(
Window owner,
string windowTitle,
string label,
object operation,
MyDialogSettings settings)
{
MyDialog dialog = new MyDialog(windowTitle, settings);
dialog.Owner = owner;
dialog.Label = label;
ShowDialog();
}
公共调用有一个System.Windows.Window 作为参数(--> WPF 窗口),我的函数将Owner 设置为这个窗口。
现在我的同事想从 Windows 窗体应用程序中使用这个窗口。
我的第一个想法是用表单重载公共函数调用,然后在内部使用WindowInteropHelper 处理它(参见:http://blogs.msdn.com/b/mhendersblog/archive/2005/10/04/476921.aspx)
但是我必须在使用我的库的每个 (WPF) 项目中引用 Windows.Forms。
因为我无法从 WindowInteropHelper 外部访问窗口实例,所以无法在 Forms 应用程序中完成。
有什么想法吗?
【问题讨论】:
-
保留 wpf 库。休息是你同事的问题:他想要在 winforms 中休息,他自己做
WindowInteropHelper魔术。 -
但是他需要引用我的 WPF 窗口 (
MyDialog)。这是无法访问的,因为它在私有方法中。所以他不能使用WindowInteropHelper -
这是为什么呢?只要给他窗口实例。那有什么问题?如果它对 wpf 同事来说是一个大秘密,请使其非常安全(通过需要密码的公共方法大声笑)。
-
嗯...没那么容易...这是一个对话框,在调用静态函数时弹出,在操作完成后自行关闭(如进度对话框)。所以没有机会获取window的实例(不是在调用
Execute之前) -
您可以以某种方式报告进度,并使您漂亮的 wpf 窗口成为可选的。然后 winforms-guy 可以画出他自己丑陋的 winforms 进度对话框。