获取WPF窗体上的控件并赋值
实例讲解wpf数据绑定及值转换的应用
实例讲解wpf数据绑定及值转换的应⽤先谈谈MVVM谈起MVVM并不陌⽣了,最开始接触MVVM是在做⼀个web项⽬,这个web项⽬是⽤在移动端,使⽤了onic+angularJs,期初使⽤的时候对MVVM并不是很了解,经过⼀段时间的使⽤发现,其实MVVM是对MVC的延展,现在前端技术越来越多,⽽且前端的⼯作也越来越多,不仅仅是做个页⾯的事情了,随着nodejs的兴起,前段好像⽆所不能了,做起了后端的事情,这⾥MVVM其实也有这个意思,随着MVC应⽤的越来越⼴泛,⼤家发现了⼀个问题:C层越来越⼤,业务逻辑全部在这块。
MVVM是为了解决这个问题⽽出现的。
MVVM(Model-View-view-Model),这种模式上突出⼀点“数据绑定”:将Model和View进⾏绑定,Model的数据变化时View上的展⽰就随之变化,然后有⼀个View-Model 就是写在前端的数据转换⼯具,angular其实本质上是将后端的开发模型引⼊到了前端,在前端完成数据整理的⼯作。
wpf的MVVM1.UI对象绑定将源控件的某个属性绑定到⽬标控件的某个属性上,绑定的语法:Text=”{Binding ElementName=SourceObjectName, Path=SourceProperty}”看个例⼦:我们将姓名1后textbox的text属性绑定到姓名后的textbox的text属性上,当我在姓名后⾯输⼊什么,姓名1后也会显⽰⼀样的内容代码:<TextBlock Grid.Row="1" Grid.Column="1" Text="姓名" Style="{StaticResource UserInfoTextBlockStyle}"></TextBlock><TextBox x:Name="main_userInfo_name_tbx" Grid.Row="1" Grid.Column="2" Style="{StaticResource UserInfoTextBoxStyle}"></TextBox><TextBlock Grid.Row="1" Grid.Column="3" Text="姓名1" Style="{StaticResource UserInfoTextBlockStyle}" ></TextBlock><TextBox x:Name="main_userInfo_phoneNO_tbx" Text="{Binding ElementName=main_userInfo_name_tbx,Path=Text }" Grid.Row="1" Grid.Column="4" Style="{StaticResource UserInfoTextBoxStyle}"></TextBox> View Code当然除了在xaml中实现绑定,我们也可以在cs⽂件中代码实现绑定:代码如下:Binding binding = new Binding();//设置源对象binding.Source = main_userInfo_name_tbx;//设置源属性binding.Path = new PropertyPath("Text");//添加到⽬标属性this.main_userInfo_phoneNO_tbx.SetBinding(TextBlock.TextProperty, binding);View Code2.绑定到数据源这种很常见,⽐如常见的combobox下拉框中的数据,可以通过绑定来实现。
winform窗体传值的几种方式(属性赋值,委托,事件)
w inform窗体传值的几种方式(属性赋值,委托,事件)百度云盘代码下载:/share/link?shareid=388120&uk=3627406265 窗体设计:父窗体:子窗体:方法一:1、子窗体设置一个父窗体MainFrm属性:public MainFrm MainFrm { get; set; }2、在父窗体启动子窗体的时候:ChildFrm frm =new ChildFrm();frm.MainFrm = this;//将当前主窗体的实例传递给子窗体frm.Show();3、在子窗体同步按钮中://子窗体跟父窗体完全耦合在一块了。
MainFrm.txtName.Text = this.textBox1.Text;4、这样即可实现,在子窗体点击同步,子窗体文本框的值会同步到父窗体,但这种方式,子窗体跟父窗体完全耦合在一块了。
方法二、用委托来实现。
委托可以把一个方法作为参数带入另一个方法,在窗体传值中,子窗体需要执行一个方法来改变父窗体的值,而这个方法,则可以用委托从父窗体传递过来。
在父窗体中,声明修改文本框的方法AfterChildChange,在new一个子窗体的时候,将这个方法传递给子窗体。
那么当子窗体点击同步按钮时,会执行父窗体的AfterChildChange方法,已达到修改文本框值的目的。
1、在子窗体中设置一个委托类型的属性:public Action<string> AfterChangeTextDel { get; set; }2、在子窗体同步按钮中:if (AfterChangeTextDel != null){AfterChangeTextDel(this.textBox1.Text);//执行委托}3、在父窗体中添加方法:public void AfterChildChange(string text){txtName.Text = text;}4、在父窗体启动子窗体按钮:ChildFrm frm =new ChildFrm();frm.AfterChangeTextDel = new Action<string>(this.AfterChildChange);frm.Show();5、这样也能实现窗体传值,子窗体的委托可以在父窗体其他地方可以进行直接执行。
wpf listview控件用法
wpf listview控件用法WPF(Windows Presentation Foundation)是Microsoft推出的一种用于创建富客户端应用程序的框架,其中的ListView控件是一种非常常用的用于显示和编辑数据的控件。
在这篇文章中,我们将介绍ListView控件的用法,并提供一些相关的参考内容。
首先,让我们来看看ListView控件的基本用法。
要在WPF中使用ListView控件,我们需要在XAML中声明一个ListView元素,并指定其ItemsSource属性来绑定要显示的数据集合。
例如:```xml<ListView ItemsSource="{Binding MyDataCollection}"><ListView.View><GridView><GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" /><GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" /><!-- 其他列 --></GridView></ListView.View></ListView>```上面的示例中,我们使用了一个GridView来定义ListView的列,并使用了DisplayMemberBinding来指定每列绑定的数据。
接下来,让我们看一下ListView控件的一些常用特性和功能。
1. 列表项样式定制:可以通过ListView的ItemContainerStyle属性来定制每个列表项的外观,例如改变背景色、字体颜色等。
2. 列表项模板:可以通过ListView的ItemTemplate属性来定制列表项的内容,例如指定每个列表项如何显示和布局。
WPF中的image控件的Source赋值
WPF中的image控件的Source赋值WPF中的Image控件Source的设置1.XAML中简单的⽅式(Source="haha.png");image控件的Source设置为相对路径后(Source="haha.png")运⾏不能显⽰解决⽅案:当Source设置为相对路径后(Source="haha.png")改成“/WpfApplication1;component/haha.png”。
2.逻辑代码中img.Source = new BitmapImage(new Uri("pack://application:,,,/Images/haha.jpg"));//或img.Source = new BitmapImage(new Uri("pack://SiteOfOrigin:,,,/Images/haha.jpg"));下⾯讲解这两种⽤法(参考博客http://www点/projecteactual/wpf-jiaocheng-tupian-lujing-uri.html)今天就来详细说明wpf图⽚资源的路径问题和如何设置?⼀开始我在后台直接复制图⽚路径是物理路径:b.ImageSource = new BitmapImage(new Uri("../Themes/ZCThemes/skin/icon/card_unchoose.png", UriKind.RelativeOrAbsolute));在visual studio 2013中是没有问题的。
但是发布后,单独运⾏exe就出错了。
这个就涉及到wpf的新协议: WPF引⼊了统⼀资源标识Uri(Unified Resource Identifier)来标识和访问资源。
其中较为常见的情况是⽤Uri加载图像。
Uri表达式的⼀般形式为:协议+授权+路径协议:pack://授权:有两种。
wpf的低调自定义属性面板PropertyGrid
wpf的低调⾃定义属性⾯板PropertyGrid当没有轮⼦的时候,就⾃⼰制作轮⼦。
前⾔项⽬上的需求,我想需要⽤到这样⼀个跟vs属性编辑⼀样的东西,专业叫法,属性⾯板怎么弄呢?百度⼀下,wpf的PropertyGrid,如下:群上问wpf跟vs属性编辑类似的东西有⼈弄过吗开始为了要体现我的卑微,这⾥要做⼀下说明:刚接触wpf不久(不对,以前也看过这⽅⾯的东西,就是没实际项⽬),刚好两个⽉前,项⽬要⽤wpf弄,然后就开⼲。
很多东西都是边研究边做的。
上⾯那段是我⼀年前写的,本来当时做出来之后就想写个博⽂,没完成,现在把它完成了。
这⾥先介绍⼀个wpf控件库HandyControl,我⼀年前⽤的时候控件还没那么多,现在也有PropertyGrid,具体表现如下:是不是很酷炫,我最近更新才看到的,害,可惜了。
本来想替换掉我写的,但很⿇烦:1.功能 2.现有项⽬布局。
我写的是这样的:跟HandyControl样式⽅⾯差别很⼤,那是因为我把样式Style = null,使⽤的全部原⽣的样式,所以如果你想酷炫,完全可以⾃⼰改,这⾥我只讲这个控件的实现思路。
怎么来?慢慢来。
1.分析这个控件功能:显⽰对象属性,并对其进⾏分类和编辑2.分析控件显⽰布局,可以参考vs的属性⾯板肯定有⼈头⼤,vs属性⾯板那么多功能,哇,烦躁。
有⼈欲求不得,所以烦躁。
简单的讲就是想太多把⼀个东西,⼀件事分成n件事情来做,然后把每步做好,这件事就做好了。
如果很乱,你就写下来。
vs属性⾯板很复杂,那简化⼀下,就展⽰⼀个属性,做成下⾯这样:以上的分析,我们就知道了控件的两个重要的东西,逻辑和布局。
第⼀步:创建测试类public class Test:ViewModelBase{private string _Name;///<summary>/// Name 属性更改通知///</summary>public string Name{get{return _Name;}set{_Name = value;RaisePropertyChanged(() => Name);}}}ViewModelBase只是为了使⽤RaisePropertyChanged触发属性变化,引⽤⾃GalaSoft.MvvmLight既然是编辑对象的属性,那肯定少不了Attribute,所以需要写⼀个描述对象属性的Attribute,如下:///<summary>///可对字段应⽤的 PropertyGrid 特征///</summary>[AttributeUsage(AttributeTargets.All,AllowMultiple = true, Inherited = true)]public class LsPropertyGridAttribute : Attribute{///<summary>///对应的板块///</summary>public string Plate;///<summary>///显⽰名称///</summary>public string ShowName;public LsPropertyGridAttribute(string plate, string showName){TypeName = type;ShowName = showName;}}那测试的类的name属性就可以添加上特征public class Test:ViewModelBase{private string _Name;/// <summary>/// Name 属性更改通知/// </summary>[LsPropertyGrid("内容","名字")]public string Name{get{return _Name;}set{_Name = value;RaisePropertyChanged(() => Name);}}}接下来写PropertyGrid控件,这⾥我继承StackPanel,并且你得有个展⽰的依赖属性,⽤来赋值对象,所以它的类型是object,别问我怎么知道的,问就是掐指⼀算。
wpf 窗体间互相传值的方式
wpf 窗体间互相传值的方式【最新版】目录一、WPF 窗体间传值的需求背景二、WPF 窗体间传值的几种方式1.使用属性2.使用事件3.使用依赖属性4.使用数据绑定三、实例分析四、总结正文一、WPF 窗体间传值的需求背景在 WPF 应用程序开发过程中,我们常常需要实现窗体之间的数据传递,以实现各个窗体之间的数据交互。
例如,在一个主窗体中,我们需要根据用户的选择来更新子窗体的数据。
这时,我们就需要找到合适的方法来实现窗体间的数据传递。
二、WPF 窗体间传值的几种方式1.使用属性在 WPF 中,我们可以使用属性来实现窗体间的数据传递。
首先,我们需要在数据类中定义一个属性,然后在窗体中使用INotifyPropertyChanged 接口来通知属性值的更改。
这种方式较为简单,但需要注意的是,它只适用于简单的数据类型,对于复杂的数据类型,我们需要自己实现 INotifyPropertyChanged 接口。
2.使用事件除了使用属性,我们还可以使用事件来实现窗体间的数据传递。
在数据类中,我们定义一个事件,并在事件处理程序中更新属性值。
在窗体中,我们订阅这个事件,并在事件触发时更新 UI。
这种方式可以实现更为复杂的数据传递需求,但相较于属性,它的实现较为复杂。
3.使用依赖属性WPF 中还提供了一种特殊的属性——依赖属性,它可以实现父子窗体间的数据绑定。
在父窗体中,我们需要将依赖属性的源设置为子窗体,然后在子窗体中更改属性值。
这种方式可以实现实时的数据同步,但需要注意的是,它只适用于简单的数据类型,对于复杂的数据类型,我们需要自己实现依赖属性。
4.使用数据绑定在 WPF 中,我们可以使用数据绑定来实现窗体间的数据传递。
数据绑定是指将 UI 元素的属性与数据模型的属性进行绑定,从而实现数据的同步。
在窗体中,我们需要设置数据上下文,并在 UI 元素中设置绑定。
这种方式可以实现复杂的数据传递需求,但相较于其他方式,它的实现较为复杂。
wpf propertygridcontrol 用法
wpf propertygridcontrol 用法WPF PropertyGridControl 用法WPF(Windows Presentation Foundation)是由微软推出的一种用于创建用户界面的框架。
在WPF中,PropertyGridControl 是一种常用的控件,用于显示对象属性和允许用户编辑属性值。
本文将详细介绍PropertyGridControl 的用法,以帮助读者更好地了解和使用该控件。
一、PropertyGridControl 的基本介绍PropertyGridControl 是一种自定义控件,用于显示对象的属性和允许用户编辑属性值。
它是由控件库中的GridControl 和PropertyGridEditor 组合而成的,因此,其外观和行为与传统的表格视图非常相似。
PropertyGridControl 主要由如下几个部分组成:1. 属性列表区域:显示对象属性的列表,每个属性通常包括属性名称和属性值。
2. 属性值编辑区域:用于编辑属性值的区域,根据属性的类型,可以显示不同的编辑器。
3. 属性描述区域:提供对属性的描述信息,如属性的作用、取值范围等。
4. 搜索区域:允许用户根据关键字搜索属性。
二、PropertyGridControl 的基本用法1. 引用控件库要使用PropertyGridControl,首先需要将控件库引用到项目中。
可以通过NuGet 包管理器或手动添加引用的方式,将控件库添加到项目中。
2. 添加PropertyGridControl 控件在XAML 页面中的合适位置添加PropertyGridControl 控件。
可以使用如下代码示例:<dxprg:PropertyGridControl x:Name="propertyGridControl" />其中,dxprg 是控件库的命名空间。
3. 设置属性数据源将需要显示和编辑的对象赋值给PropertyGridControl 的SelectedObject 属性。
wpf listview控件的用法
wpf listview控件的用法WPF中的ListView控件是一种用于显示列表数据的控件。
它可以绑定到数据源,并将数据以行的形式呈现给用户。
下面是一些关于ListView控件的基本用法:1.添加ListView控件在XAML文件中添加ListView控件,示例代码如下:xaml复制代码<ListView x:Name="myListView"><ListView.View><GridView><GridViewColumn Header="Name" Width="120"DisplayMemberBinding="{Binding Name}" /><GridViewColumn Header="Age" Width="50"DisplayMemberBinding="{Binding Age}" /><GridViewColumn Header="Email" Width="200"DisplayMemberBinding="{Binding Email}" /></GridView></ListView.View></ListView>上面的代码定义了一个包含三列的ListView控件,分别显示Name、Age和Email 属性。
DisplayMemberBinding属性用于将数据源中的属性与控件中的列进行绑定。
2.绑定数据源将ListView控件绑定到数据源,需要在代码文件中实现数据源的绑定,示例代码如下:c复制代码myListView.ItemsSource = GetData(); // 获取数据源并绑定到ListView控件上面的代码通过调用GetData()方法获取数据源,并将其绑定到ListView控件的ItemsSource属性上。
wpf 命令参数
wpf 命令参数WPF命令参数是一种在WPF应用程序中使用的关键概念。
命令参数允许开发人员将特定的数据传递给命令,以便在执行命令时使用。
本文将介绍WPF命令参数的基本概念、用法和实例,并解释如何正确使用命令参数来增强WPF应用程序的功能。
一、什么是WPF命令参数WPF命令参数是一种在WPF应用程序中用于传递数据的机制。
在WPF中,命令是一种用于处理用户交互的特殊对象,例如按钮的点击事件或菜单项的选择事件。
而命令参数则是在执行命令时传递给命令的数据。
二、命令参数的用法在WPF中,可以通过两种方式使用命令参数:在XAML中声明和在代码中设置。
1. 在XAML中声明命令参数在XAML中声明命令参数是一种常见的做法。
可以使用以下代码将命令参数声明为XAML元素的属性:<Button Content="保存" Command="{Binding SaveCommand}" CommandParameter="参数值" />上述代码中,SaveCommand是一个绑定到ViewModel中的命令,CommandParameter属性将命令参数设置为"参数值"。
当按钮被点击时,SaveCommand将被执行,并且"参数值"将作为命令参数传递给SaveCommand。
2. 在代码中设置命令参数除了在XAML中声明命令参数外,还可以在代码中设置命令参数。
可以使用以下代码设置命令参数:SaveCommand.Execute("参数值");上述代码中,SaveCommand是一个实现了ICommand接口的命令对象,Execute方法将"参数值"作为命令参数传递给SaveCommand。
三、使用命令参数的实例下面将通过一个实例来说明如何正确使用命令参数来增强WPF应用程序的功能。
Winform调用WPF窗体及WPF中Grid绘制表格
WinForm调用WPF窗体及WPF中Grid绘制表格背景质检模块,操作工根据工序和物料编码,确定需要填写的质检单,由于质检单的格式多样化,普通的表格控件无法满足需求,它们基本是每一列固定一种显示方式。
但质检模块涉及的表单,根据相关属性值的不同,同一列不同行的显示方式、操作不同,而且涉及单元格合并等。
因此想到利用WPF中Grid自绘表格。
由于整个系统是WinForm程序,这就需要使用在WinForm中调用WPF窗体。
方法1.WinForm调用WPF窗体1)在WinForm工程的解决方案资源管理器中,在对应的解决方案中新建或者添加现有的WPF用户控件工程2)在WPF中创建自定义的控件,或添加WPF控件至面板上3)在WinForm面板上添加ElementHost控件4)生成解决方案后,在刚刚的ElementHost中的Child属性中添加自建的WPF生成的控件5)注意:调用WPF窗体,需要为项目添加WPF相关引用,如图1-1所示:图1-1 WPF相关引用文件2.WPF中Grid绘制表格:1)定义好要绘制表格的行数和列数,同时可以定义好行高和列宽,如图2-1:图2-1 画表格2)表格边框可以在画表格的同时就画好,这种方式适合表格固定的情况;也可以在添加表格内容的时候,逐一添加,如图2-2。
图2-2 画边框3)添加表格内容a)确定单元格显示形式,如TextBlock、TextBox、Label、RadioButton等。
b)步骤:新建一个控件,内容属性的一些设置,确定填充位置,添加至需要显示的Grid中。
若有需要,可进行数据绑定。
详细如图2-3。
图2-3 单元格填充图2-4 单元格填充效果如下示例图:图2-5 示例图3.WPF后台数据绑定:。
wpf templatebinding用法
wpftemplatebinding用法WPF(WindowsPresentationFoundation)是一种强大的用户界面框架,它提供了许多功能和工具,使开发人员能够创建丰富的、交互式的用户界面。
TemplateBinding是WPF中的一个概念,它允许您通过简单的语法将数据绑定到控件的属性上。
这篇文章将详细介绍TemplateBinding的用法。
TemplateBinding是WPF中的一种特殊类型的属性占位符,它表示绑定到控件模板中的数据源属性。
通过使用TemplateBinding,您可以将数据绑定到控件的属性上,而无需编写复杂的绑定表达式。
TemplateBinding的使用非常简单,您只需在控件模板中直接使用它即可。
要使用TemplateBinding,您需要遵循以下步骤:1.确定数据源:首先,您需要确定要绑定的数据源。
这可以是控件本身的数据成员,也可以是其他对象或集合。
2.在模板中使用TemplateBinding:在控件模板中,您可以使用TemplateBinding来引用数据源的属性。
TemplateBinding通常用于绑定控件的文本、背景颜色、边框样式等属性。
3.指定绑定的属性:在TemplateBinding中,您需要指定要绑定的属性名称。
这将告诉WPF将数据源的相应属性值赋给控件的相应属性。
下面是一个简单的示例,展示了如何使用TemplateBinding将数据绑定到WPF控件的文本属性上:```xaml<TextBlockText="{TemplateBindingName}">```在这个示例中,我们使用TemplateBinding将一个名为“Name”的数据源属性的值绑定到TextBlock控件的Text属性上。
当数据源的“Name”属性发生变化时,TextBlock控件的文本也会相应地更新。
除了基本的文本绑定,TemplateBinding还支持其他类型的绑定,如绑定到颜色、尺寸、值等属性。
c#WPF循环遍历控件进行绑定数据
c#WPF循环遍历控件进⾏绑定数据当wpf界⾯上有很多控件需要绑定值的时候,新新⼿⼀般是xxxx.Text =xxx.ToString();对于没有接触过MVVM的⼈来说,ViewModel还是有点学习成本的,下⾯的⽅法是我以前项⽬上所使⽤的,这⾥记录下,也⽅便⾃⼰以后再次使⽤,废话不多说,直接上代码,肯定有很多不好的地⽅,因为我也是新⼿,请指教,谢谢前端Demo.xmal<StackPanel x:Name="sp_Parent"><TextBlock x:Name="txb_One"></TextBlock><TextBox x:Name="txt_Two"></TextBox><Label x:Name="lbl_Three"></Label><TextBlock x:Name="txb_Four"></TextBlock></StackPanel> 请注意,StackPanel 为布局控件,当然其他的布局控件也是可以的,x:Name命名没有啥要求,但是,控件的 X:Name命名⼀定要注意,以控件缩写加下划线再加DTO⾥的字段,否则后⾯绑定不上。
后台Demo.xaml.cspublic class TestDTO: BaseDTO{public string One { get; set; }public Boolean Two { get; set; }public DateTime Three { get; set; }public int Four { get; set; }}TestDTO dTO = new TestDTO{One = "one_TextBlock",Two = false,Three = DateTime.Now,Four = 4};this.Fill<TestDTO>(dTO, this.st_child.Children);要继承EcBaseWindow.cs由于没有连接数据库,所有数据都是直接测试数据,Fill⽅法就可以将TestDTO中的数据绑定到界⾯上了 BaseDTO.cs如下:public int Index { get; set; }public int PageSize { get; set; }public override string ToString(){JsonSerializerSettings settings = new JsonSerializerSettings();JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() =>{//settings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;settings.DateFormatString = "yyyy-MM-dd HH:mm";settings.Formatting = Formatting.Indented;//空值处理settings.NullValueHandling = NullValueHandling.Ignore;return settings;});return JsonConvert.SerializeObject(this);} 要引⼊using Newtonsoft.Json;ECBaseWindow.cs///<summary>///表单填充///</summary>///<typeparam name="T"></typeparam>///<param name="Element"></param>///<param name="UIElement"></param>protected void Fill<T>(T Element, UIElementCollection UIElement){JsonCollect.Instance.FillToElement(JsonConvert.SerializeObject(Element), UIElement);}继承 WindowJsonCollect.cs///<summary>///将页⾯元素填充到DTO的json格式对象中,需要什么控件待补充///</summary>///<param name="jobj"></param>///<param name="element"></param>private void SetElementValue(JObject jobj, UIElement element){if (element is TextBox){TextBox textBox = element as TextBox;if (.ToLower().StartsWith("txt_")){jobj[.Replace("txt_", string.Empty)] = textBox.Text.Trim();}}if (element is TextBlock){TextBlock textBlock = element as TextBlock;if (.ToLower().StartsWith("txb_")){jobj[.Replace("txb_", string.Empty)] = textBlock.Text.Trim();}}if (element is CheckBox){CheckBox checkBox = element as CheckBox;if (.ToLower().StartsWith("chk_")){jobj[.Replace("chk_", string.Empty)] = checkBox.IsChecked;}}if (element is PasswordBox){PasswordBox passwordBox = element as PasswordBox;if (.ToLower().StartsWith("pwd_")){jobj[.Replace("pwd_", string.Empty)] = passwordBox.Password; }}if (element is DatePicker){DatePicker datePicker = element as DatePicker;if (datePicker.SelectedDate != null){jobj[.Replace("dpk_", string.Empty)] = datePicker.SelectedDate; }}if (element is Grid){//递归拿到内容jobj.Merge(ConvertToString((element as Grid).Children));}if (element is StackPanel){jobj.Merge(ConvertToString((element as StackPanel).Children));}if (element is WrapPanel){jobj.Merge(ConvertToString((element as WrapPanel).Children));}if (element is DockPanel){jobj.Merge(ConvertToString((element as DockPanel).Children));}if (element is Border){Border b = element as Border;SetElementValue(jobj, b.Child);}if (element is ComboBox){ComboBox comboBox = element as ComboBox;if (.ToLower().StartsWith("cbx_")){if (jobj != null && jobj[.Replace("cbx_", string.Empty)] != null){comboBox.SelectedItem = jobj == null ||jobj[.Replace("cbx_", string.Empty)] == null ? "" :jobj[.Replace("cbx_", string.Empty)];}else{MessageBox.Show($"数据集中没有[{.Replace("cbx_", string.Empty)}]字段,⽆法填充"); }}}}///<summary>///将结果集的字符串形式填充到指定容器内的规范元素上///</summary>///<param name="result">需要填充的结果集</param>///<param name="uIElementCollection">传⼊的控件集</param>public void FillToElement(string result, UIElementCollection uIElementCollections){JObject JResult = JsonConvert.DeserializeObject<JObject>(result);foreach (UIElement item in uIElementCollections){ExplainElement(JResult, result, item);}}///<summary>///将结果集的字符串形式填充到指定容器内的规范元素上///</summary>///<param name="result">需要填充的结果集</param>///<param name="uIElementCollection">传⼊的控件集</param>public void FillToElement(string result, UIElement uIElementCollection){JObject JResult = JsonConvert.DeserializeObject<JObject>(result);ExplainElement(JResult, result, uIElementCollection);}///<summary>///将JSON 元素解释道具体的控件上///</summary>///<param name="JResult"></param>///<param name="result"></param>///<param name="uIElement"></param>private void ExplainElement(JObject JResult, string result, UIElement element){if (element is TextBox){TextBox textBox = element as TextBox;if (.ToLower().StartsWith("txt_")){if (JResult != null && JResult[.Replace("txt_", string.Empty)] != null){textBox.Text = JResult == null ||JResult[.Replace("txt_", string.Empty)] == null ? "" :JResult[.Replace("txt_", string.Empty)].ToString();}else{MessageBox.Show($"数据集中没有[{.Replace("txt_", string.Empty)}]字段,⽆法填充");}}}if (element is TextBlock){TextBlock textBlock = element as TextBlock;if (.ToLower().StartsWith("txb_")){if (JResult != null && JResult[.Replace("txb_", string.Empty)] != null){textBlock.Text = JResult == null ||JResult[.Replace("txb_", string.Empty)] == null ? "" :JResult[.Replace("txb_", string.Empty)].ToString();}else{MessageBox.Show($"数据集中没有[{.Replace("txb_", string.Empty)}]字段,⽆法填充"); }}}if (element is Label){Label label = element as Label;if (.ToLower().StartsWith("lbl_")){if (JResult != null && JResult[.Replace("lbl_", string.Empty)] != null){label.Content = JResult == null ||JResult[.Replace("lbl_", string.Empty)] == null ? "" :JResult[.Replace("lbl_", string.Empty)].ToString();}else{MessageBox.Show($"数据集中没有[{.Replace("lbl_", string.Empty)}]字段,⽆法填充");}}}if (element is CheckBox){CheckBox checkBox = element as CheckBox;if (.ToLower().StartsWith("chk_")){bool ischeck = false;if (JResult != null && JResult[.Replace("chk_", string.Empty)] != null){bool.TryParse(JResult[.Replace("chk_", string.Empty)].ToString(), out ischeck);checkBox.IsChecked = ischeck;}else{MessageBox.Show($"数据集中没有[{.Replace("chk_", string.Empty)}]字段,⽆法填充"); }}}if (element is Grid){Grid grid = element as Grid;FillToElement(result, grid.Children);}if (element is StackPanel){StackPanel stack = element as StackPanel;FillToElement(result, stack.Children);}if (element is WrapPanel){WrapPanel wrap = element as WrapPanel;FillToElement(result, wrap.Children);}if (element is DockPanel){DockPanel dock = element as DockPanel;FillToElement(result, dock.Children);}if (element is Border){Border border = element as Border;ExplainElement(JResult, result, border.Child as UIElement);}if (element is ComboBox){ComboBox comboBox = element as ComboBox;if (.ToLower().StartsWith("cbx_")){if (JResult != null && JResult[.Replace("cbx_", string.Empty)] != null){comboBox.SelectedItem = JResult == null ||JResult[.Replace("cbx_", string.Empty)] == null ? "" :JResult[.Replace("cbx_", string.Empty)];}else{MessageBox.Show($"数据集中没有[{.Replace("cbx_", string.Empty)}]字段,⽆法填充"); }}}}这⾥⾯才是重头戏,主要的作⽤就是将控件进⾏封装,依据控件的Name来处理控件并进⾏绑定数据。
wpf,datagrid,获取模板列中控件
竭诚为您提供优质文档/双击可除wpf,datagrid,获取模板列中控件篇一:使用datagridweb控件读取和写入数据使用datagridweb控件读取和写入数据web窗体数据绑定的结构便于在页控件中显示数据。
但是,数据绑定不是双向的,也就是说,数据绑定从数据源读取数据但不对其进行更新。
更新比显示数据更复杂,因为大多数web窗体页不需要将数据写回源,所以web窗体数据绑定通过不包括更新代码将页大小和页处理保持在最精简的程度。
当然,有时候您要创建更新数据的web窗体页。
本演练阐释完成该目的的一种方式。
它说明了如何使用datagrid 控件显示数据,允许用户对其进行编辑,然后将更改的数据发送回源。
当该页运行时,它看起来类似于下面这样:若要完成本演练,您需要:访问带有northwindsqlserver示例数据库的服务器。
充足的权限,以便在web服务器所在的计算机上创建web应用程序项目。
演练被分成若干较小的部分:创建web窗体页。
添加必要的数据组件。
添加显示数据的datagrid控件。
添加从数据库读取数据并将网格绑定到数据的代码。
配置datagrid控件以允许用户编辑数据。
添加更新数据的代码。
创建项目和窗体第一步是创建web应用程序和web窗体页。
创建项目和窗体1.在“文件”菜单上指向“新建”,然后单击“项目”。
2.在“新建项目”对话框中,请执行以下操作:a.在“项目类型”窗格中选择“Visualbasic项目”或“Visualc#项目”。
b.在“模板”窗格中选择“web应用程序”。
c.在“位置”框中,为您的应用程序输入完整的uRl(包含http://、服务器名称和项目名称)。
web服务器上必须安装iis5版(或更高版本)和.net框架。
如果计算机上已安装iis,可以为服务器指定http://localhost。
当单击“确定”时,将在您指定的web服务器的根处创建新的web窗体项目。
此外,名为webForm1.aspx的新web窗体页将显示在“设计”视图中web窗体设计器上。
获取WPF窗体上的控件并赋值 八
获取WPF窗体上的控件并赋值八using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace 获取空间上的textBOX并赋值1{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();Start();}public void Start(){t1.Text = "张三";t2.Text = "18";t3.Text = "男";}private void btn_Click(object sender, RoutedEventArgs e){this.SetNotEditable(this.g1.Children); //gridUCContent为最顶层Grid }private void SetNotEditable(UIElementCollection uiControls)foreach (UIElement element in uiControls){if (element is TextBox){(element as TextBox).IsEnabled = false;t1.Text = string.Empty;t2.Text = string.Empty;t3.Text = string.Empty;}else if (element is Grid){this.SetNotEditable((element as Grid).Children);}else if (element is Expander){//此代码仅供参考//在您的布局中,Expander或者其他不具有Children属性的控件的Content,若不是StackPanl或Grid,而是其他的子控件,则需要更多的判断if ((element as Expander).Content is StackPanel){StackPanel sa = (element as Expander).Content as StackPanel;this.SetNotEditable(sa.Children);}else if ((element as Expander).Content is Grid){Grid sa = (element as Expander).Content as Grid;this.SetNotEditable(sa.Children);}}else if (element is StackPanel){this.SetNotEditable((element as StackPanel).Children);}else if (element is ScrollViewer){StackPanel sp = (element as ScrollViewer).Content as StackPanel;this.SetNotEditable(sp.Children);//ScrollViewer不具有Children属性,无法对其进行遍历,但是具有Content属性,作为容器型控件,一般都可以通过这样的方法来解决。
WPF中将字符串值赋值给其他类型的属性
WPF中将字符串值赋值给其他类型的属性⾸先我们定义的资源类Human:public class Human{public string Name { get; set; }public Human Child { get; set; }}在WPF的xaml⽂件中引⽤该资源,<Window.Resources><local:Human x:Key="human" Name="Tom" Child="ChildTom"></local:Human></Window.Resources>当我们使⽤该资源Human h = this.FindResource("human") as Human;if (h != null){MessageBox.Show();}因为这时Human的Child属性不是字符串类型,⽆法直接使⽤字符串给Child赋值,程序运⾏会出现如下的错误:这时我们可以通过⼀些⼿段将Child的属性智能的转化为Human的Name属性,我们可以定义⼀个继承⾃TypeConverter类的转化类,并且重写ConvertFrom⽅法。
public class NameToHumanTypeConverter : TypeConverter{public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value){string Name = value.ToString();Human child = new Human(); = Name;return child;}}这⾥的object value值就是从xaml⾥传过来的值,这时我们再将NameToHumanTypeConverter以特性的形式附加到Human上,[TypeConverterAttribute(typeof(NameToHumanTypeConverter))]public class Human{public string Name { get; set; }public Human Child { get; set; }}好了,运⾏程序如下图所⽰,完成对WPF中将字符串值赋值给其他类型的属性。
winform复选框控件赋值的小技巧
winform复选框控件赋值的⼩技巧前⼏天,有⼀位园友写了⼀篇不错的⽂章《》,⽂章⾥⾯介绍了怎么清空界⾯各个控件值的⼀个好技巧,这个⽅法确实是不错的,在繁杂的界⾯控件值清理中,可谓省时省⼒。
本⼈在开发Winform程序中,也有⼀个类似的⼩技巧,不是清空控件值,⽽是赋值,给复选框赋值和获取值的⼩技巧,分享讨论⼀下。
应⽤场景是这样的,如果你有⼀些需要使⽤复选框来呈现内容的时候,如下⾯两图所⽰:以上的切除部分的内容,是采⽤在GroupBox中放置多个CheckBox的⽅式;其实这个部分也可以使⽤Winform控件种的CheckedListBox控件来呈现内容。
如下所⽰。
不管采⽤那种控件,我们都会涉及到为它赋值的⿇烦,我这⾥封装了⼀个函数,可以很简单的给控件赋值,⼤致代码如下。
CheckBoxListUtil.SetCheck(this.groupRemove, info.切除程度);那么取控件的内容代码是如何的呢,代码如下:info.切除程度 = CheckBoxListUtil.GetCheckedItems(this.groupRemove);赋值和取值通过封装函数调⽤,都⾮常简单,也可以重复利⽤,封装⽅法函数如下所⽰。
代码public class CheckBoxListUtil{///<summary>///如果值列表中有的,根据内容勾选GroupBox⾥⾯的成员.///</summary>///<param name="group">包含CheckBox控件组的GroupBox控件</param>///<param name="valueList">逗号分隔的值列表</param>public static void SetCheck(GroupBox group, string valueList){string[] strtemp = valueList.Split(',');foreach (string str in strtemp){foreach (Control control in group.Controls){CheckBox chk = control as CheckBox;if (chk != null && chk.Text == str){chk.Checked = true;}}}}///<summary>///获取GroupBox控件成员勾选的值///</summary>///<param name="group">包含CheckBox控件组的GroupBox控件</param>///<returns>返回逗号分隔的值列表</returns>public static string GetCheckedItems(GroupBox group){string resultList = "";foreach (Control control in group.Controls){CheckBox chk = control as CheckBox;if (chk != null && chk.Checked){resultList += string.Format("{0},", chk.Text);}}return resultList.Trim(',');}///<summary>///如果值列表中有的,根据内容勾选CheckedListBox的成员.///</summary>///<param name="cblItems">CheckedListBox控件</param>///<param name="valueList">逗号分隔的值列表</param>public static void SetCheck(CheckedListBox cblItems, string valueList){string[] strtemp = valueList.Split(',');foreach (string str in strtemp){for (int i = 0; i < cblItems.Items.Count; i++){if (cblItems.GetItemText(cblItems.Items[i]) == str){cblItems.SetItemChecked(i, true);}}}}///<summary>///获取CheckedListBox控件成员勾选的值///</summary>///<param name="cblItems">CheckedListBox控件</param>///<returns>返回逗号分隔的值列表</returns>public static string GetCheckedItems(CheckedListBox cblItems){string resultList = "";for (int i = 0; i < cblItems.CheckedItems.Count; i++){if (cblItems.GetItemChecked(i)){resultList += string.Format("{0},", cblItems.GetItemText(cblItems.Items[i]));}}return resultList.Trim(',');}}以上代码分为两部分,其⼀是对GroupBox的控件组进⾏操作,第⼆是对CheckedListBox控件进⾏操作。
c#winform动态生成控件与获取动态控件输入的值
7
this.Controls.Add(ttt);
8
ttt.Location = new Point(10, 10);
9
}
10
11
private void button2_Click(object sender, EventArgs e)
12
{
13
foreach (Control c in this.Controls)
以下总结以下生成与获取动态控件
1 private string textBoxName = "newTextBox";
Hale Waihona Puke 23private void button1_Click(object sender, EventArgs e)
4
{
5
TextBox ttt = new TextBox();
6
= textBoxName;
14
{
15
if (.Equals(textBoxName))
16
{
17
MessageBox.Show(c.Text);
18
break;
19
}
20
}
21
}
View Code
1 for(int i=0;i<this.Controls.Count;i++) 2{ 3 TextBox txt=this.Controls["textbox"+i] as TextBox; 4 5}
请求出错错误代码503请尝试刷新页面重试
c#winform动 态 生 成 控 件 与 获 取 动 态 控 件 输 入 的 值
WPF绑定Binding用法
WPF绑定Binding⽤法什么是绑定(Binding)?在winform中, 我们常常会⽤到各种类型的赋值, 例如:button1.Text="Hello";label.Text="Hello";...类似这种赋值操作, 我们之所以不称之为绑定, 主要原因是因为他们⼤多数操作都是⼀次性的, ⽆论是数据还是按钮本⾝发⽣变化,对两者⽽⾔都是不可见的。
⽽绑定的概念则侧重于: 两者的关联,协议与两者之间的影响。
⾸先, 从⼀个简单的例⼦来理解什么是绑定。
创建⼀个滑块控件, 并且希望在滑动的过程中, 把值更新到另外⼀个静态⽂本上。
代码如下:在winform中, 我们常规的做法会给滑块创建⼀个值改变事件,同时将滑块的值赋值给⽂本。
接下来, 我只需要在静态⽂本中添加⼀⼩段绑定的声明,即可完整原本很复杂的操作:Text={Binding ElementName=slider,Path=Value}{Binding }: Binding的声明语法, ⼀对尖括号,开头声明以Binding 开始。
ElementName= : 该声明意为, 设置元素的名称Path: 设置关联元素的位置,上例中设置为元素的value属性。
那么该如何理解整句话的意义, 翻译: 静态⽂本TextBlock的Text属性将通过绑定的⽅式关联到元素名'slider'的value属性上。
效果图所⽰:可以看到,在滑块不断的滑动过程中, TextBlock也在不断的发⽣变化, 说明TextBlock已经得到了滑动滑动过程中的值变化, 这种关联, 我们称之为绑定, 在WPF当中, 绑定⼜分很多种, ⽽上⾯这种则是通过元素绑定的⽅式。
理解了基础的绑定之后,然后就是理解绑定的模式。
绑定的模式就类似我们商业中的合作, 是⼀次性回报还是持续获益, 是否可以单⽅⾯终⽌, 是否具有投票权等, 在WPF中绑定的模式⼜分为五种:OneWay(单向绑定) : 当源属性发⽣变化更新⽬标属性, 类似上⾯的例⼦中, 滑动变化更新⽂本的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
//此代码仅供参考
//在您的布局中,Expander或者其他不具有Children属性的控件的Content,若不是StackPanl或Grid,而是其他的子控件,则需要更多的判断
public void Start()
{
t1.Text = "张三";
t2.Text = "18";
t3.Text = "男";
}
private void btn_Click(object sender, RoutedEventArgs e)
}
else if (element is Grid)
{
this.SetNotEditable((element as Grid).Children);
}
}
else if (element is StackPanel)
{
this.SetNotEditable((element as StackPanel).Children);
(element as TextBox).IsEnabled = false;
t1.Text = string.Empty;
t2.Text = string.Empty;
t3.Text = string.Empty;
{
this.SetNotEditable(this.g1.Children); //gridUCContent为最顶层Grid
}
private void SetNotEditable(UIElementCollection uiControls)
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Start();
}
{
foreach (UIElement element in uiControls)
{
if (element is TextBox)
{
}
}
}
}
}
this.SetNotEditable(sa.Children);
}
else if ((element as Expander).Content is Grid)
{
Grid sa = (element as Expander).Content as Grid;
this.SetNotEditable(sa.Children);
}
}
else if (element is ScrollViewer)
{
StackPanel sp = (element as ScrollViewer).Content as StackPanel;
if ((element as Expander).Content is StackPanel)
{
StackPanel sa = (element as Expander).Content as StackPanel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.TБайду номын сангаасsks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace 获取空间上的textBOX并赋值1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
this.SetNotEditable(sp.Children);
//ScrollViewer不具有Children属性,无法对其进行遍历,但是具有Content属性,作为容器型控件,一般都可以通过这样的方法来解决。