外贸网站源码 php,中国服务器排名前十名,wordpress 分类目录–标签转换器,怎么自己做网站凑钱使用C#开发过Windows Forms的都知道#xff0c;在Windows Forms程序中#xff0c;有一个PropertyGrid控件#xff0c;可以用于显示对象的属性#xff0c;在WPF中并没有默认提供此功能的控件#xff0c;今天以一个简单的小例子#xff0c;简述在WPF中借助WinForm的Propert…使用C#开发过Windows Forms的都知道在Windows Forms程序中有一个PropertyGrid控件可以用于显示对象的属性在WPF中并没有默认提供此功能的控件今天以一个简单的小例子简述在WPF中借助WinForm的PropertyGrid实现属性列表功能仅供学习分享使用如有不足之处还请指正。
涉及知识点
PropertyGrid 是.NET中属性浏览器的核心PropertyGrid控件显示任何对象或类型的属性并检索项的属性。PropertyGrid一般用在Windows Forms程序中在WPF程序中可以通过自定义控件实现也可以借助WindowsFormsHost控件将Windows Forms中的控件宿主到WPF程序中。WindowsFormsHost一个WPF控件允许允许在 WPF 程序上托管 Windows Forms控件。反过来若要在 Windows 窗体控件或窗体中承载 WPF 元素请使用 控件 ElementHost 。
PropertyGrid简介
PropertyGrid最常用属性如下所示
SelectedObject设置PropertyGrid控件选择的对象赋值后控件将显示对象所有public修饰的属性。SelectedObjects设置PropertyGrid控件显示的对象列表为数组类型。赋值后将显示所有对象公共的public修饰的属性。
除了上述两个最常用属性PropertyGrid还有其他属性如下所示
BackColor 更改其背景色。HelpBackColor 更改助窗口背景色。HelpForeColor 更改助窗口字体颜色。HelpVisible 显示隐藏帮助窗口。ToolbarVisible 显示隐藏工具栏。LargeButtons 显示大型工具栏按钮。PropertySort 按字母顺序对属性进行排序。BackColor 更改拆分器颜色。LineColor 更改网格线和边框。
PropertyGrid支持的对象属性注解如下所示
DescriptionAttribute - 设置属性在属性下方的说明帮助窗格中显示的属性的文本。 这是为具有焦点的活动属性提供帮助文本的有用方法。 将此属性应用于 MaxRepeatRate 该属性。CategoryAttribute 设置属性在网格中所属的类别。 当需要按类别名称分组的属性时这非常有用。 如果属性未指定类别则会将其分配给 Misc 类别。 将此属性应用于所有属性。BrowsableAttribute – 指示属性是否显示在网格中。 如果要从网格中隐藏属性这非常有用。 默认情况下公共属性始终显示在网格中。 将此属性应用于 SettingsChanged 该属性。ReadOnlyAttribute – 指示属性是否为只读。 如果要使属性在网格中不可编辑这非常有用。 默认情况下具有 get 和 set 访问器函数的公共属性在网格中可编辑。 将此属性应用于 AppVersion 该属性。DefaultValueAttribute – 标识属性的默认值。 如果想要为属性提供默认值然后确定该属性的值是否不同于默认值则这非常有用。 将此属性应用于所有属性。DefaultPropertyAttribute – 标识类的默认属性。 类的默认属性在网格中选择类时首先获取焦点。 将此属性应用于 AppSettings 类。DisplayNameAttribute - 实际显示的名称
通过上述注解可以显示属性在PropertyGrid中的说明或者其他内容。
PropertyGrid控件目前支持.NET Framework和Windows Desktop版本如下所示 开发步骤
1. 检查类库
首先检查项目中是否引用【Microsoft.WindowsDesktop.App】框架在此框架中会包含【System.Windows.Forms】,若没有需要手动添加如下图所示 2. 引用命名空间
在项目中需要添加PropertyGrid的页面添加System.Windows.Forms命名空间如下所示
Window x:ClassHelloWorld.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:HelloWorldxmlns:winfmclr-namespace:System.Windows.Forms;assemblySystem.Windows.Formsmc:IgnorabledTitleMainWindow Height450 Width800
/Window
3. 添加PropertyGrid控件
由于PropertyGrid是Winodws Forms中的控件并不能在WPF中直接使用需要托管到WindowsFormsHost中才能正确显示如下所示
GridGrid.ColumnDefinitionsColumnDefinition/ColumnDefinitionColumnDefinition/ColumnDefinition/Grid.ColumnDefinitionsButton x:NamebtnHelloWorld ContentClick Say Hello WorldWidth150 Height30 ClickbtnHelloWorld_Click/ButtonWindowsFormsHost Grid.Column1 Margin18,12,0,0 NamewindowsFormsHost1 VerticalAlignmentTopwinfm:PropertyGrid x:NamepropertyGrid/winfm:PropertyGrid/WindowsFormsHost
/Grid
4. 设置对象
通过SelectedObject属性为PropertyGrid赋值由于PropertyGrid属性并不是WPF中的依赖对象所以不能进行绑定但可以通过后台C#代码进行赋值。如下所示
定义测试类Person
public class Person
{[Category(Person)][DisplayName(标识)][Description(唯一标识)]public int Id { get; set; }[Category(Person)][DisplayName(名称)][Description(名称)]public string Name { get; set; }[Category(Person)]public string Title { get; set; }[Category(Person)]public string Description { get; set; }[Category(Person)]public int Age { get; set; }
}
声明Person对象并赋值给PropertyGrid如下所示
public MainWindow()
{InitializeComponent();var p new Person{Id 1,Name 老码识途,Age 20,Description 这是一个人,Title 老码识途作者};this.propertyGrid.SelectedObject p;
}
实例演示
通过上述步骤就可以实现PropertyGrid属性框的功能本例将Person的作为要显示属性的对象赋值给PropertyGrid如下所示 注意如果没有为属性设置Category则默认为Misc。
以上就是《在WPF程序中实现PropertyGrid功能》的全部内容旨在抛砖引玉一起学习共同进步。