WPF中實現PropertyGrid的三種方式

2021-09-22 13:18:02 字數 3753 閱讀 2840

由於wpf中沒有提供propertygrid控制項,有些業務需要此類的控制項。這篇文章介紹在wpf中實現propertygrid的三種方式,三種方式都是俺平時使用時總結出來的。

第一種方式:使用windowsform的propertygrid控制項。

用過wpf的童鞋都曉得,可以通過windowsformshost將windowsform的控制項宿主到wpf中使用。很簡單,分為簡單的3步。

第一步:引用dll:在wpf應用程式中引入system.windows.forms.dll。

第二步:引用命名空間:在窗體的.cs**中引用此命名空間:using system.windows.forms;在xaml中引用此命名空間**如下:

xmlns:my="clr-namespace:system.windows.forms;assembly=system.windows.forms"

第三步:通過windowsformshost使用propertygrid控制項。 

<

windowsformshost 

height

="287"

horizontalalignment

="left"

margin

="18,12,0,0"

name

="windowsformshost1"

verticalalignment

="top"

width

="200"

>

<

my:propertygrid 

x:name

="propertygrid1"

>

my:propertygrid

>

windowsformshost

>

看下效果button的屬性:

將button的背景色設定為紅色:

使用方式很簡單。由於它是wpf控制項,所以不需要使用windowsformshost。

<

window 

x:class

xmlns

=""xmlns:x

=""xmlns:wpg

="clr-namespace:wpg;assembly=wpg"

title

="window1"

height

="300"

width

="300"

>

<

dockpanel 

verticalalignment

="stretch"

>

<

button 

dockpanel.dock

="top"

x:name

="btn"

>

button for test

button

>

<

wpg:propertygrid 

dockpanel.dock

="top"

instance=""

verticalalignment

="stretch"

isenabled

="true"

>

wpg:propertygrid

>

dockpanel

>

window

>

把button的背景色設定為紅色:

第三種方式:使用wf4.0設計器裡面的屬性框控制項。wf4.0的流程設計器有乙個這樣的propertygrid控制項。我們利用它來實現自己的propertygrid控制項。這也是本文重點介紹的方式。參考:native wpf 4 propertygrid。分五個步驟去實現。

1、自定義乙個使用者控制項,這個控制項繼承grid類。grid將包含真正的介面元素。

2、用workflow foundation的workflowdesigner乙個物件作為這個控制項的私有成員。

3、對於需要設計的物件,在grid中新增乙個propertyinspectorview物件的子元素。對外它是乙個grid,其實它的型別是properyinspector。

4、通過反射獲取和使用propertyinspector的一些方法。

5、實現乙個selectedobject屬性,標準的propertygrid都有它。用來處理propertyinspector選擇物件的改變。

**如下:

using

system.activities.presentation;

using

system.activities.presentation.model;

using

system.activities.presentation.view;

using

system.reflection;

using

system.windows.controls;

namespace

system.windows.control

set);

this

.selectiontypelabel.text 

=value.gettype().name;

}else

);this

.selectiontypelabel.text 

=string

.empty;}}

}///

///xaml information with propertygrid's font and color information

///

///documentation for workflowdesigner.propertyinspectorfontandcolordata

public

string

fontandcolordata

}#endregion

//////

default constructor, creates a hidden designer view and a property inspector

///

public

wpfpropertygrid()

//////

updates the propertygrid's properties

///

public

void

refreshpropertylist());}

}}

效果:

總結:

本文提供了三種方式去在wpf中實現propertygrid。

MVVM模式和在WPF中的實現

我大概是從2102年底開始接觸wpf,之前一直用winform。剛開始看了下感覺跟winform區別不大,控制項可以拖進去,選中了控制項屬性面板可以設定屬性 事件面板可以監聽事件,後台 處理事件,一切都那麼的熟悉。xaml布局也跟android布局很像,所以沒學習就直接開始了,覺得摸索摸索基本就差不...

wpf中xps文件合併功能實現

原文 wpf中xps文件合併功能實現 如果要是直接先開啟乙個xps檔案,用新檔案去寫fixeddocument,或者documentsequence 新增到新的檔案中的話,會報錯,提示,system.windows.xps.xpspackagingexception 型別的未經處理的異常在 reac...

在WPF中快速實現鍵盤鉤子

原文 在wpf中快速實現鍵盤鉤子 大部分的時候,當我們需要鍵盤事件的時候,可以通過在主視窗註冊keybinding來實現,不過,有的時候我們需要的是全域性鍵盤事件,想在任何乙個地方都能使用,最開始的時候我是通過鍵盤鉤子來實現的,不過鍵盤鉤子這種dll呼叫的方式怎麼都看著不大爽,這裡介紹一種通過eve...