Windows窗体与WPF窗体相互调用

一.WPF窗体调用windows窗体

(一)在wpf窗体中,若想调用windows窗体,有两种方法:

1.直接调用        

 private void btnOpenWindows2_Click(object sender, RoutedEventArgs e)
        {
            //直接调用
            Form1 form1=new Form1();
            form1.ShowDialog();
        }
2.借助WindowInteropHelper和WindowWrapper。 WindowInteropHelper 类用于 协助 Windows Presentation Foundation (WPF) 与 Win32 代码之间的互操作。

 private void btnOpenWindows_Click(object sender, RoutedEventArgs e)
        {
            //借助WindowInteropHelper和WindowWrapper
            Form1 form1 = new Form1();
            WindowInteropHelper helper=new WindowInteropHelper(this);
            form1.StartPosition = FormStartPosition.CenterParent;
            form1.ShowDialog(new WindowWrapper(helper.Handle));
        }
其中WindowWrapper是自己定义的类,如下:
public class WindowWrapper : System.Windows.Forms.IWin32Window
    {
        public WindowWrapper(IntPtr handle)
        {
            _hwnd = handle;
        }

        public IntPtr Handle
        {
            get { return _hwnd; }
        }

        private IntPtr _hwnd;
    }
(二)如果在wpf窗体中,以非模态方式调用windows窗体时,需要注意使用 ElementHost类来沿着正确的窗口或窗体转发键盘事件消息

1.在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0下找到 WindowsFormsIntegration.dll。将该dll引用进WPF中
2.调用WindowsFormsHost.EnableWindowsFormsInterop( )方法
        private void btnOpenWindows2_Click(object sender, RoutedEventArgs e)
        {
            //直接调用
            WindowsFormsHost.EnableWindowsFormsInterop();//需要在WPF应用程序中显示一个非模态的Windows窗体
            Form1 form1=new Form1();
            form1.Show();
        }
(三)在windows窗体中调用wpf窗体
1.建立wpf项目
2.建立windows窗体项目
3.在windows窗体项目中引用wpf项目
4.如果想在windows窗体中访问wpf窗体,还需要引用几个dll:

PresentationCore

PresentationFramework

System.Xaml

WindowsBase

WindowsFormsIntegration


5.如果在windows窗体中,以非模态方式调用wpf窗体时,需要注意使用 ElementHost类来沿着正确的窗口或窗体转发键盘事件消息
 private void btnOpenWPF_Click(object sender, EventArgs e)
        {
            System.Windows.Window wpfwindow = new WpfApplication3.UserDefineWindow();
            //使WPF窗体响应键盘输入
            ElementHost.EnableModelessKeyboardInterop(wpfwindow);
            //设置WPF窗体的owner,使其WindowStartupLocation.CenterOwner生效。
            WindowInteropHelper helper = new WindowInteropHelper(wpfwindow);
            helper.Owner = this.Handle;
            wpfwindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            wpfwindow.Show();
        }




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF的主窗体是一种容器,用于承载和管理应用程序中的各种视图和控件。DockPanel则是一种面板控件,用于布局子控件的位置。 在WPF的主窗体调用Page,可以使用DockPanel作为主窗体的根容器,并将Page作为DockPanel的子控件进行调用。 首先,在主窗体的XAML文件中,定义一个DockPanel作为根容器,如下所示: ``` <Window> <DockPanel> </DockPanel> </Window> ``` 接下来,在主窗体的代码文件中,使用Page的实例化对象,并将其添加到DockPanel中。假设我们已经创建了一个名为Page1的Page类,在MainWindow.xaml.cs中的代码如下所示: ``` Page1 page = new Page1(); // 实例化Page1类对象 dockPanel.Children.Add(page); // 将Page1对象添加到DockPanel中 ``` 通过这样的操作,就可以在DockPanel中调用Page,并在主窗体中展示Page1的内容。可以在Page类中定义需要展示的UI元素,并在主窗体调用Page来呈现这些UI元素。 需要注意的是,DockPanel控件是一个按照顺序排列子控件的面板,可以通过设置子控件的DockPanel.Dock属性来确定子控件的位置。默认情况下,子控件将从左到右排列。如果需要改变子控件的位置,可以调整其Dock属性为Top、Bottom、Left或Right,来实现不同的布局效果。 以上就是在WPF窗体使用DockPanel调用Page的简要介绍。使用DockPanel作为容器,能够方便地布局和管理各种子控件和视图,为应用程序的界面设计和视图管理提供了便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值