共用方式為


HOW TO:在設計階段變更屬性行為

更新:2007 年 11 月

當您使用擴充性自訂 Windows Presentation Foundation (WPF) Designer for Visual Studio 時,通常會建立自訂控制項。您有時會需要控制項的屬性在設計階段與執行階段有不同的行為,但又能正常讓使用者設定屬性的值。例如,您可能希望使用者能夠為控制項將可見的屬性設為 false,但是此控制項在設計階段仍應保持可見狀態。

本主題將描述變更自訂控制項屬性之設計階段行為的程序。如需逐步引導您完成程序的詳細範例,請參閱逐步解說:在設計階段變更屬性行為

重要事項:

當您使用這個技術時,設計工具中的屬性行為不符合 [XAML] 檢視中的屬性值。[XAML] 檢視會顯示使用者在設計階段輸入的值。[XAML] 檢視中的值表示屬性在執行階段時顯示的行為。

如果您只要判斷控制項是否處於設計階段中,以及依此設定其屬性,請參閱 HOW TO:判斷自訂控制項是在設計階段或執行階段

建立自訂 DesignModeValueProvider

在這個程序中,您會建立一個自訂 DesignModeValueProvider 類別。在 TranslatePropertyValue 方法中,您會為要變更之屬性的新行為加入自訂邏輯。這些變更只會影響設計工具。在執行階段,屬性會依使用者的設定運作。

若要建立自訂 DesignModeValueProvider

  1. 在專案中,加入下列組件的參考:

    • Microsoft.Windows.Design.Extensibility
  2. 將新類別加入到自訂控制項專案中,然後編輯類別,使其繼承自 DesignModeValueProvider。看起來應該像這樣子:

    Public Class YourCustomDesignModeValueProvider
        Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider
    
    End Class
    
    class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider
    {
    }
    
  3. 將建構函式加入至類別。在建構函式中,識別您要擷取的屬性。

    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.
    }
    
  4. 覆寫類別中的 TranslatePropertyValue 方法。這是您指定屬性之新設計階段行為的地方。

    Public Overrides Function TranslatePropertyValue(ByVal identifier As Microsoft.Windows.Design.Model.PropertyIdentifier, ByVal value As Object) As Object
    
        'If identifier.DependencyProperty Is <Property To Change> Then
        '
        '    Custom logic goes here.
        'End If
    
        'More custom logic for more properties can go here.
    
        Return MyBase.TranslatePropertyValue(identifier, value)
    End Function
    
    public override object TranslatePropertyValue(Microsoft.Windows.Design.Model.PropertyIdentifier identifier, object value)
    {
        //if (identifier.DependencyProperty == <The Property To Change>)
        //{
        //    Custom logic goes here.
        //}
    
        //More custom logic for more properties can go here.
    
        return base.TranslatePropertyValue(identifier, value);
    }
    
    注意事項:

    在這個程序中,您會建立一個處理兩個不同屬性的 DesignModeValueProvider。您也可以建立多個 DesignModeValueProvider 物件來處理不同的屬性。

將 DesignModeValueProvider 附加到自訂控制項

在這個程序中,您會使用 FeatureAttribute 屬性,將 DesignModeValueProvider 附加到自訂控制項。

若要將 DesignModeValueProvider 附加到自訂控制項

  1. 找出自訂控制項的類別宣告 (Class Declaration)。看起來應該像這樣子:

    Public Class YourCustomControl
    
    class YourCustomControl
    
  2. FeatureAttribute 屬性加入到類別宣告,然後指定您在前面程序中建立的 DesignModeValueProvider

    <Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _
    Public Class YourCustomControl
    
    [Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))]
    class YourCustomControl
    
    注意事項:

    您也可以使用中繼資料存放區,將 DesignModeValueProvider 附加到自訂控制項。如需詳細資訊,請參閱中繼資料存放區HOW TO:使用中繼資料存放區

請參閱

其他資源

設計階段和執行階段行為的比較

了解 WPF 設計工具擴充性

WPF 設計工具擴充性