【帅刺猬课堂】Winform中使用WPF的UserControl

今天准备做一个登录界面的时候,想用WPF来做出比较漂亮的界面,所有在Winform项目中加入WPF的用户控件,过程如下,FrmLogin是Winform界面,是父窗体,Login.xaml的WPF的UserControl是子窗体,

首先打开FrmLogin的设计界面,在左边的工具栏中找出拖到界面上,并将Dock设置为Fill,其实就是让ElementHost充满整个界面。然后在FrmLogin对应的代码中加入:

 1 protected override void OnLoad(EventArgs e)
 2         {
 3             if (!DesignMode)
 4             {
 5                 var login = new Login(this);
 6                 elementHost1.Child = login;
 7             }
 8
 9             base.OnLoad(e);
10         }

下面碰到一个例子,就是我在这个UserControl中点击登录的时候,隐藏自身的同时,也需要隐藏掉父窗体,也就隐藏掉FrmLogin,所以我的做法是,在父窗体代码中设置个属性:MyOpacity为可读写。代码如下:

public double MyOpacity
{
       get { return this.Opacity; }
       set { this.Opacity=value; }
}

protected override void OnLoad(EventArgs e)
{
        if (!DesignMode)
        {
              var login = new Login(this);//这里将父窗体传递到子窗体Login中去
               elementHost1.Child = login;
        }

         base.OnLoad(e);
}

然后在子窗体代码中加入:

public Login(FrmLogin frm):this()  //通过构造函数将FrmLogin也就是父窗体取到
{
            this.frmLogin = frm;
            tRepository = new T_HuntersRepository();
}

private void BtnStart_OnClick(object sender, RoutedEventArgs e)
{
            if (tRepository.Login(userName.Text, userPassword.Text))
            {
                Form1 form1=new Form1();
                form1.Show();
                this.Opacity = 0;            //改变自己的透明度
                frmLogin.MyOpacity = 0;      //在这里改变父窗体的透明度
            }
            else
            {
                MessageBox.Show("用检查用户名和密码!", "系统提示:");
            }
        }

简单的界面如图:,绿色部分为WPF的UserControl,红色为Winform的窗体,点击登录成功后,两者都会隐藏掉。

转载请注明:【帅刺猬课堂】,如果有任何疑问请QQ联系:363608715

时间: 2024-10-07 13:09:08

【帅刺猬课堂】Winform中使用WPF的UserControl的相关文章

WinForm中调用WPF控件

WinForm中调用WPF控件 在WinForm中可以使用WPF中的控件,或者由WPF创建的自定义控件: 步骤1:创建WinForm工程: 步骤2:在WinForm工程的解决方案资源管理器中,在刚刚创建的WinForm解决方案中新建或者添加现有的WPF用户控件工程: 步骤3:在WPF中创建自定义的控件,或者添加WPF控件到面板上: 步骤4:在WinForm面板上添加ElementHost控件(工具箱中): 步骤5:生成解决方案: 步骤6:在刚刚的ElementHost中的Child属性中添加刚刚

C#winform中调用wpf

原文:C#winform中调用wpf 在WinForm中是可以使用WPF中的控件(或者由WPF创建的自定义控件) 1.新建一个winform项目: 2.在解决方案上新建一个wpf项目: 如图: 如果有如下错误,就在winform中的引用添加System.xaml的引用即可: 错误 1 类型“System.Windows.Markup.IComponentConnector”在未被引用的程序集中定义.必须添加对程序集“System.Xaml, Version=4.0.0.0, Culture=ne

WINFORM中加入WPF控件并绑定数据源实现跨线程自动更新

1. WINFORM中添加两个ElementHost,一个放WPF的Button,一个放WPF的TextBox.其中TextBox与数据源绑定,实现跨线程也可以自动更新,而不会出现WINFORM的TextBox控件与数据源绑定后,存在子线程中更新数据源报错(跨线程更新控件)的情况. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System

C# WinForm中使用WPF的控件

步骤1:创建WinForm工程 步骤2:在刚刚创建的WinForm工程中新建或者添加现有的WPF用户自定义控件 <UserControl x:Class="wndFormTest.ComBoBoxButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&q

WPF与Winform中的不同(1)

1. 部分控件的Text属性,变成了 Content属性 如: winform中,Button.Text = "abc"; wpf中,Button.Content = "abcd"; 2. wpf中控件的控件属性,由 boolean类型的Visiable 改成 枚举类型的 Visibility winform中,Button.Visable = true (false); wpf中,Button.Visibility = System.Windows.Visibil

WPF中嵌入WinForm中的webbrowser控件

原文:WPF中嵌入WinForm中的webbrowser控件 使用VS2008创建WPF应用程序,需使用webbrowser.从工具箱中添加WPF组件中的webbrowser发现其中有很多属性事件不能使用.决定还是使用WinForm中的webbrowser.要想在WPF中使用WinForm控件,查看MSDN,需经过以下步骤. 创建名为 HostingWfInWpf 的 WPF 应用程序项目. 在解决方案资源管理器中,添加一个对名为 WindowsFormsIntegration.dll 的 Wi

C# Winform中执行post操作并获取返回的XML类型的数据

/// <summary> /// 返回指定日期的订单数据 /// </summary> /// <param name="StartDate">起始日期</param> /// <param name="EndDate">结束日期</param> /// <returns>DataTable</returns> public System.Data.DataTable

另一种在WINFORM中使用XNA的方法

之前在写化学分子模型制作程序的时候,使用一种方法,将WINFORM控件嵌入到XNA窗体中,从而实现了即使用WINFORM窗体控件又使用XNA.最近在写另一个物理运动学课件制作程序,同样使用XNA,但从另一个角度实现了WINFORM控件和XNA共存,并且在编码上更简单一些. 一.创建XNA工程并添加窗体 向工程添加窗体MainForm,并修改GAME1为MainGame.我们把XNA内容绘制到MainForm上,其实绘制到任何有句柄的控件都可以,即使我们绘制到桌面也未尝不可.但更少的控件能够使我们

C#在WinForm中怎样让多行TEXTBOX的换行

要让一个Windows Form的TextBox显示多行文本就得把它的Multiline属性设置为true.  要让TextBox里面的文本换行大家往往会想到直接在要换行的地方加个转义的换行符"\n": [csharp] view plaincopyprint? this.textBoxDescription.Text = "操作说明\nESC\t最小化\nALT+F4\t退出\nShift+F6\t设置访问地址"; this.textBoxDescription.