HOW TO:在設計階段變更屬性行為
當您使用擴充性自訂 WPF Designer for Visual Studio 時,通常會建立自訂控制項。 您有時會需要控制項的屬性在設計階段與執行階段有不同的行為,但又能正常讓使用者設定屬性的值。 例如,您可能希望使用者能夠為控制項將可見的屬性設為 false,但是此控制項在設計階段仍應保持可見狀態。
本主題將描述變更自訂控制項屬性之設計階段行為的程序。 如需逐步引導您完成程序的詳細範例,請參閱逐步解說:在設計階段變更屬性行為。
重要
當您使用這項技術時,設計工具中的屬性行為和 [XAML] 檢視中的屬性值並不相符。[XAML] 檢視會顯示使用者在設計階段輸入的值。[XAML] 檢視中的值表示屬性在執行階段時顯示的行為。
如果您只要判斷控制項是否處於設計階段中,以及依此設定其屬性,請參閱 HOW TO:判斷自訂控制項是在設計階段或執行階段。
建立自訂 DesignModeValueProvider
在這個程序中,您會建立一個自訂 DesignModeValueProvider 類別。 在 TranslatePropertyValue 方法中,您會為要變更之屬性的新行為加入自訂邏輯。 這些變更只會對設計工具造成影響。 在執行階段,屬性會依使用者的設定運作。
若要建立自訂 DesignModeValueProvider
在專案中,加入下列組件的參考:
- Microsoft.Windows.Design.Extensibility
將新類別加入到自訂控制項專案中,然後編輯類別,使其繼承自 DesignModeValueProvider。 看起來應該像這樣子:
Public Class YourCustomDesignModeValueProvider Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider End Class
class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider { }
將建構函式加入至類別。 在建構函式中,識別您要擷取的屬性。
Public Sub New() 'Properties.Add(<The Property To Change Goes Here>) 'More properties can go here. End Sub
public YourCustomDesignModeValueProvider() { //Properties.Add(<The Property To Change Goes Here>); //More properties can go here. }
覆寫類別中的 TranslatePropertyValue 方法。 這是您指定屬性之新設計階段行為的地方。
Public Overrides Function TranslatePropertyValue( _ ByVal item As ModelItem, _ ByVal identifier As PropertyIdentifier, _ ByVal value As Object) As Object 'If identifier.Name = <Name of the property to change> Then ' ' Custom logic goes here. 'End If 'More custom logic for more properties can go here. Return MyBase.TranslatePropertyValue(item, identifier, value) End Function
public override object TranslatePropertyValue(ModelItem item, PropertyIdentifier identifier, object value) { //if (identifier.Name == <Name of the property to change>) //{ // Custom logic goes here. //} //More custom logic for more properties can go here. return base.TranslatePropertyValue(item, identifier, value); }
注意
在這個程序中,您會建立一個處理兩個不同屬性的 DesignModeValueProvider。您也可以建立多個 DesignModeValueProvider 物件來處理不同的屬性。
將 DesignModeValueProvider 附加到自訂控制項
在這個程序中,您會使用 FeatureAttribute 屬性,將 DesignModeValueProvider 附加到自訂控制項。
若要將 DesignModeValueProvider 附加到自訂控制項
找出自訂控制項的類別宣告 (Class Declaration)。 看起來應該像這樣子:
Public Class YourCustomControl
class YourCustomControl
將 FeatureAttribute 屬性加入到類別宣告,然後指定您在前面程序中建立的 DesignModeValueProvider。
<Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _ Public Class YourCustomControl
[Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))] class YourCustomControl
注意
您也可以藉由提供屬性表格的方式,將 DesignModeValueProvider 附加到自訂控制項。如需詳細資訊,請參閱 提供設計階段中繼資料。