Интеграция WPF и WinForms и класс приложений - PullRequest
1 голос
/ 07 января 2010

Я планирую создать приложение WPF с главным окном, которое будет запускать различные WinForms. Некоторые из WinForms используют класс System.Windows.Forms.Application (DoEvents, Application.Path и т. Д.). Как вы думаете, будет ли проблема в этом?

Могу ли я по-прежнему использовать System.Windows.Forms.Application.DoEvents () из WinForm, запускаемого из приложения WPF?

Ответы [ 2 ]

2 голосов
/ 07 января 2010

Основной проблемой будет возможность создания экземпляра окна Windows Forms и присвоение его владельцу окна WPF. Winforms будет хотеть IWin32Window, который не окно WPF. Чтобы обойти это, вам нужно создать собственный класс.

Я нашел этот код в блоге Марка Рендла (я скопировал его здесь, поскольку мне пришлось использовать кэш Google для доступа к странице). ССЫЛКА - ВНИМАНИЕ: Может не работать

class Shim : IWin32Window
{
  public Shim(System.Windows.Window owner)
  {
    // Create a WindowInteropHelper for the WPF Window
    interopHelper = new WindowInteropHelper(owner);
  }

  private WindowInteropHelper interopHelper;

  #region IWin32Window Members

  public IntPtr Handle
  {
    get
    {
      // Return the surrogate handle
      return interopHelper.Handle;
    }
  }

  #endregion
}

и способ его использования:

namespace System.Windows.Forms
{
  public static class WPFInteropExtensions
  {
    public static DialogResult ShowDialog(
        this System.Windows.Forms.Form form,
        System.Windows.Window owner)
    {
      Shim shim = new Shim(owner);
      return form.ShowDialog(shim);
    }
  }
}

Я не тестировал этот код, но, читая в Интернете, кажется, что вы можете разместить окна Winforms внутри приложения WPF.

Я только что нашел эту ссылку на MSDN, в которой очень подробно описано, как взаимодействовать с элементом управления / окном Win32 в приложении WPF.

Надеюсь, это поможет вам.

0 голосов
/ 07 января 2010

Я делал это иногда и не сталкивался с какой-либо проблемой. Однако я не очень рекомендую это, вы должны предпочесть WPF, когда вы находитесь в приложении WPF.

для примера, если вы хотите путь к приложению, используйте это: System.Reflection.Assembly.GetExecutingAssembly().Location

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...