在WPF中使用WINFORM控件
- 格式:pdf
- 大小:147.44 KB
- 文档页数:4
winform实现MVVM 1. 实现一个VM模型public class Person : INotifyPropertyChanged {#region 字段private string name;private int age;private int phone;#endregion#region 属性public string Name{get{return name;}set{name = value;OnPropertyChanged("Name");}}public int Age{get{return age;}set{age = value;OnPropertyChanged("Age");}}public int Phone{get{return phone;}set{phone = value;OnPropertyChanged("Phone");}}#endregionpublic event PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string PropName) {if(PropertyChanged!=null){PropertyChanged.Invoke(this, new PropertyChangedEventArgs(PropName));}}}模型类必须引用INotifyPropertyChanged接口2. 窗口控件[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JYmdG2WD-)(…/Image/image-.png)]每个Textbox的Tag属性分别设置为对象的属性名3. 窗体代码public partial class FrmMain : Form{private Person VModel;public FrmMain(){InitializeComponent();VModel = new Person(){Age = 16,Name = "SHH",Phone = 123};}/// <summary>/// 递归获取所有控件/// </summary>/// <param name="ctl"></param>/// <returns></returns>private List<Control> GetAllControl(Control ctl){List<Control> result = new List<Control>(); if (ctl.HasChildren){if (!(ctl is Form)) result.Add(ctl);foreach (Control item in ctl.Controls) {result.AddRange(GetAllControl(item));}}else{result.Add(ctl);}return result;}/// <summary>/// 重写Load事件,绑定数据/// </summary>/// <param name="e"></param>protected override void OnLoad(EventArgs e){base.OnLoad(e);List<Control> list = GetAllControl(this);var propes =VModel.GetType().GetProperties();try{foreach (Control item in list){var prop = propes.FirstOrDefault(a => item.Tag != null && == item.Tag.ToString());if (prop != null){if (item is TextBox)item.DataBindings.Add(new Binding("Text", VModel, ));}}}catch (Exception){throw;}}private void btnShow_Click(object sender, EventArgs e){MessageBox.Show(Newtonsoft.Json.JsonConvert.SerializeO bject(VModel));}private void btnChange_Click(object sender, EventArgs e){VModel.Age = 100;VModel.Phone = 9999; = "laksjdlks";}}4. 实现思路1.VM模型引用INotifyPropertyChanged接口,当属性发生改变时,即执行了set访问器,触发事件2.将控件的tag属性与模型属性一一匹配3.遍历窗体控件,实现界面和模型数据的双向绑定5. 注意事项1.这里只是实现了双向绑定,单向影响没有实现2.ViewModel与Model之间的转换没有实现3.GetAllControl方法并不能获取所有控件4.不同类型的属性值需要绑定不同的控件,这个需要另外一一测试参考网站。
WPF常⽤控件⽤法及介绍1.GroupBox注意: GroupBox仍然需要布局容器来放置元素。
如: StackPanel⾯板<GroupBox Header="select number?"><StackPanel><RadioButton>one</RadioButton><RadioButton>two</RadioButton><RadioButton>three</RadioButton></StackPanel></GroupBox>2.TabControl像这种标签页控件, 在winform种⾮常常见, Tabpge⼦页⾯, ⽽在WPF种, 对应的则是TabItem类。
所⽰的代码⽰意图:<TabControl><TabItem Header="⾸页"><StackPanel><Button>button1</Button><Button>button2</Button><Button>button3</Button></StackPanel></TabItem><TabItem Header="第⼆页"><StackPanel><Button>button4</Button><Button>button5</Button><Button>button6</Button></StackPanel></TabItem></TabControl>与Content属性相同, TabItem的Header同样可以接收任何类型的对象。
如何在WPF中使用Windows Form控件由于WPF中没有没有DateTimePicker控件,网上有人写的又不太好用,而在WinForm中有此控件,因此想到了从.net中借用此控件。
首先,我们需要向项目中的引用(reference)中添加两个动态库dll,一个是.NET库中的System.Windows.Forms,另外一个是WindowsFormsIntegration。
组件不好找,排一下序就比较容易了。
添加完两个动态dll以后,就可以在控件库中找到WindowsFormsHost这个控件了。
这个控件是我们添加Windows Form控件的基础。
跟别的其他的控件一样,它也是可控的,可以自定义它在窗口中的位置、控件大小颜色等属性。
将这个控件放入窗体,放置完以后在xmal代码中会自动生成相应代码:<Grid><WindowsFormsHost Height="100"HorizontalAlignment="Left"Margin="36,29,0,0" Name="windowsFormsHost1" VerticalAlignment="Top" Width="200" /></Grid>然后,需要在xmal的开始处添加两行代码xmlns:WinFormHost="clr-namespace:System.Windows.Forms.Integration;assembly=W indowsFormsIntegration"xmlns:WinFormControls="clr-namespace:System.Windows.Forms;assembly=System.Wi ndows.Forms"这样就可以在WindowsFormsHost下放置需要的Windows Form控件了,比如<WindowsFormsHost Height="196"HorizontalAlignment="Left"Margin="104,65,0,0" Name="windowsFormsHost1"VerticalAlignment="Top"Width="286"><WinFormControls:Button Text="WinformButton"Width="150"/></WindowsFormsHost>这是最简单的情况,就是添加了一个button。
wpf调用用户控件方法在WPF中,调用用户控件的方法通常涉及到对该控件的实例化以及对该实例的直接访问。
以下是一个简单的步骤说明如何调用用户控件的方法:1. 首先,确保你的用户控件已经正确地在你的项目中注册。
这通常通过在XAML中定义控件并赋予一个名称来完成。
例如:```xml<local:MyUserControl x:Name="myUserControl"/>```这里的`local`是用户控件所在命名空间的别名,`MyUserControl`是用户控件的类名,`x:Name`赋予了控件一个实例名`myUserControl`。
2. 在你的代码后面文件中(例如MainWindow.xaml.cs),你可以通过控件名来访问这个实例并调用其方法。
例如:```csharpmyUserControl.MyMethod();```这里假设`MyMethod`是你想要调用的用户控件的方法。
请注意,你的用户控件需要是public的,并且你想要调用的方法也必须是public的,这样你才能从其他类中访问到它们。
如果方法是private或protected的,那么你只能在定义它们的类或派生类中访问这些方法。
另外,如果用户控件是在某个容器(如Grid、StackPanel等)中的,你可能需要先获取对容器的引用,然后通过容器来访问该控件。
例如,如果控件是在名为`gridContainer`的Grid中,你可以这样获取:```csharpvar myUserControl = gridContainer.FindName("myUserControl") as MyUserControl;if(myUserControl != null){myUserControl.MyMethod();}```在这里,`FindName`方法用于查找指定名称的元素,然后我们将其转换为`MyUserControl`类型。
winform tablelayoutpanel用法一、WinForm简介WinForm(Windows Forms)是微软提供的一种桌面应用程序开发技术,基于Visual Studio开发环境。
它允许开发者创建具有丰富图形用户界面的应用程序,方便用户进行操作和交互。
在WinForm中,有许多控件可供开发者使用,从而实现各种功能。
本文将重点介绍TableLayoutPanel控件的用法。
二、TableLayoutPanel概述TableLayoutPanel是一款非常实用的控件,它类似于表格布局,可以轻松地组织和管理控件。
TableLayoutPanel具有如下特点:1.结构灵活:TableLayoutPanel可以自适应调整行列数,以满足不同布局需求。
2.控件间距可调:通过设置间距属性,可以调整控件之间的距离,使布局更美观。
3.支持合并单元格:可以合并相邻的单元格,以实现更复杂的布局效果。
4.易于调整:通过拖拽单元格或调整属性,可以轻松地修改布局。
三、TableLayoutPanel常用属性与方法1.属性:(1)Columns:设置TableLayoutPanel的列数。
(2)Rows:设置TableLayoutPanel的行数。
(3)CellBorderStyle:设置单元格边框样式。
(4)CellSpacing:设置单元格间距。
(5)BackColor:设置TableLayoutPanel背景颜色。
2.方法:(1)Add:向TableLayoutPanel中添加控件。
(2)AddRange:向TableLayoutPanel中批量添加控件。
(3)Remove:从TableLayoutPanel中移除控件。
(4)Clear:清空TableLayoutPanel中的所有控件。
四、TableLayoutPanel实例应用以下是一个简单的TableLayoutPanel实例应用,用于创建一个具有按钮、标签和文本框的登录界面:1.新建一个WinForm项目。
WPF中引⼊WindowsForms控件的⽅法本⽂实例讲述了WPF中引⼊WindowsForms控件的⽅法。
分享给⼤家供⼤家参考,具体如下:环境:[1]WindowsXP with SP3[2]VS2008 with SP1正⽂:Step1:在现有⼯程中引⼊Windows Forms⿏标右键[References]->选择[Add Reference]->[.NET]标签页加⼊[WindowsFormsIntegration]和[System.Windows.Forms]两项Step2:在XAML⽂件⾥加⼊[S2-1]加⼊namespace引⽤:xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"[S2-2]加⼊Windows Forms控件<wfi:WindowsFormsHost Name="winFormsContainer" Grid.Row="2" Margin="0,5,0,0"><wf:ListView x:Name="listView1" Margin="0,2,0,0" Name="listView1"/></wfi:WindowsFormsHost>Step3:在CS代码⾥⾯操作WindowsForms控件Icon icon = new Icon(@"driver.ico");System.Windows.Forms.ImageList imageList2 = new System.Windows.Forms.ImageList();imageList2.Images.Add(icon);listView1.SmallImageList = imageList2;更多关于C#相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家C#程序设计有所帮助。