【问题标题】:WPF, dialog boxes and formsWPF、对话框和表单
【发布时间】:2013-06-05 21:36:40
【问题描述】:

我尝试将其命名为“一个非常愚蠢的问题:WPF、对话框和表单”,但不允许这样做。

我正在用 C# 编写一个 WPF 程序。我创建了这个对话框:

在 Visual Studio 2010 中选择添加 -> 新项目 -> Windows 窗体,然后构建对话框。

我听不到“取消”。除此之外,它工作得很好。

我是这样称呼它的:

 AdjustAlpha dlg = new AdjustAlpha();
 dlg.ShowDialog();

我看过很多关于 WPF 和 Forms 之间区别的帖子。我试过使用 System.Windows.Forms,我试过这个:

 DialogResult result = new AdjustAlpha.ShowDialog();
 if (result == DialogResult.OK)

抛出很多错误。

我的错误仅仅是在 WPF 应用程序中使用 WINDOWS 窗体吗?

【问题讨论】:

  • 不要在 WPF 中使用(恐龙)winforms。顺便说一句,UI 不是数据。因此,您实际上不会从 UI 元素中询问 DialogResult
  • 所以你的意思是永远不要尝试将 winforms 与 WPF 混合使用?
  • 除非 100% 需要,否则不会,例如拥有一些您无法在 WPF 中完成的重要 3rd 方 winforms 组件,或者需要维护一些遗留的东西。 winforms 已弃用。
  • 好的,我正在 WPF/XAML 中重做它。我刚刚发现在winforms中设计对话框的UI更容易......
  • @zetar 因为您链接到了您的对话框图像,而该链接现在已经消失,我们无法再看到您创建的内容。

标签: wpf modal-dialog


【解决方案1】:

我认为混合 WinForms 和 WPF 已成为过去。然而,当你被项目/公司/TPS限制时,你就去做,你必须做的!

如果您需要从 WinForms 启动 WPF 对话框,请查看如何使用 ElementHost。 如果您需要从 WPF 启动 WinForms 对话框 - 创建一个实现 WinForms 接口 IWin32Window 的类 - 将其返回的句柄传递给 WinForm 的 ShowDialog。

【讨论】:

  • 我仍然无法以正确的 WPF 方式启动对话框。某处是否有教程/示例代码?我收到有关 ShowDialog() 缺失的编译器错误。
  • 我发现这段代码:if (dlg.ShowDialog().Equals(true)) 会在 WPF 中捕获一个取消/确定的 winform。只是说'
  • 是的! ..或者你可以做if(dlg.ShowDialog()),无论哪种方式。抱歉,刚刚看到你的评论 - 刚醒来:)
  • if(dlg.ShowDialog()) 抛出编译器错误; .Equals(true) 用于 Cancel|Ok 捕捉。看起来通过 XAML 创建一个对话框真的很困难,而不是仅仅单击和拖动我需要的按钮、滑块、列表框等。而且似乎也更容易创建“背后的代码”。 Winforms 看起来更像是旧 Mac、Atari ST 和 Amiga 上的 GUI 创建系统。使用 XAML 似乎倒退了两步(只是我的 $.02)。
  • 我的错,忘记强制转换为 bool ,但你的 .Equals(true) 更好,因为它更具可读性。至于其他评论,您可以将控件拖放到 VS 中的设计器上。我只是不喜欢它,因为它会创建画布和一堆奇怪的东西。 XAML/WPF 更强大,但一开始需要学习曲线。不要气馁,一旦你更熟悉它,你可以比 WinForms 更快地破解东西。祝你好运!
猜你喜欢
  • 2018-12-24
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
相关资源
最近更新 更多