DesignModeValueProvider 类

更新:2007 年 11 月

捕获用户在设计器中进行的属性更改,并在设计时提供新值。

命名空间:  Microsoft.Windows.Design.Model
程序集:  Microsoft.Windows.Design.Extensibility(在 Microsoft.Windows.Design.Extensibility.dll 中)

语法

声明
Public Class DesignModeValueProvider _
    Inherits FeatureProvider
用法
Dim instance As DesignModeValueProvider
public class DesignModeValueProvider : FeatureProvider
public ref class DesignModeValueProvider : public FeatureProvider
public class DesignModeValueProvider extends FeatureProvider

备注

通常,当用户在设计器中更改对象的属性值时,会在设计器中为对象设置该值。使用 DesignModeValueProvider 类,可以向此进程中插入您自己的逻辑。例如,您希望用户能够将控件的可见属性设置为 false,但该控件仍应在设计时可见。

若要完成此操作,需要创建 DesignModeValueProvider 并将它附加到自定义控件。DesignModeValueProvider 捕获用户所做的属性更改,您将自己的逻辑插入 TranslatePropertyValue 方法中,DesignModeValueProvider 将新值传递到设计器。

重要说明:

使用此技术时,设计器中的属性行为与 XAML 视图中的属性值不匹配。XAML 视图显示用户在设计时输入的值。XAML 视图中的值表示该属性将在运行时展现的行为。

示例

下面的示例创建一个将附加到自定义按钮控件的自定义 DesignModeValueProvider。在 TranslatePropertyValue 方法中,更改 ButtonContent 属性,以使它在设计器中显示为大写。您还可以更改 ButtonBackground 属性,以使它在设计器中显示为默认系统颜色。这些更改只影响设计器。在运行时,ContentBackground 属性显示为用户设置的值。

有关更多信息,请参见演练:在设计时更改属性的行为


Imports System
Imports System.Windows                  'SystemColors
Imports System.Windows.Media            'SolidColorBrush
Imports System.Windows.Controls         'Button
Imports Microsoft.Windows.Design.Model  'DesignModeValueProvider

Namespace CustomButton

    Public Class CustomButtonDesignModeValueProvider
        Inherits DesignModeValueProvider


        Public Sub New()

            Properties.Add(Button.ContentProperty)
            Properties.Add(Button.BackgroundProperty)
        End Sub



        Public Overrides Function TranslatePropertyValue(ByVal identifier As PropertyIdentifier, ByVal value As Object) As Object

            If identifier.DependencyProperty Is Button.ContentProperty Then

                Return value.ToString().ToUpper()
            End If

            If identifier.DependencyProperty Is Button.BackgroundProperty Then

                Return New SolidColorBrush(SystemColors.ControlColor)
            End If

            Return MyBase.TranslatePropertyValue(identifier, value)
        End Function
    End Class
End Namespace

using System;
using System.Windows;                   //SystemColors
using System.Windows.Media;             //SolidColorBrush
using System.Windows.Controls;          //Button
using Microsoft.Windows.Design.Model;   //DesignModeValueProvider
namespace CustomButton
{
    class CustomButtonDesignModeValueProvider : DesignModeValueProvider
    {

        public CustomButtonDesignModeValueProvider()
        {
            Properties.Add(Button.ContentProperty);
            Properties.Add(Button.BackgroundProperty);
        }


        public override object TranslatePropertyValue(PropertyIdentifier identifier, object value)
        {
            if (identifier.DependencyProperty == Button.ContentProperty)
            {
                return ((string)value).ToUpper();
            }

            if (identifier.DependencyProperty == Button.BackgroundProperty)
            {
                return new SolidColorBrush(SystemColors.ControlColor);
            }

            return base.TranslatePropertyValue(identifier, value);
        }
    }
}

继承层次结构

System.Object
  Microsoft.Windows.Design.Features.FeatureProvider
    Microsoft.Windows.Design.Model.DesignModeValueProvider

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

另请参见

参考

DesignModeValueProvider 成员

Microsoft.Windows.Design.Model 命名空间

其他资源

如何:在设计时更改属性的行为

WPF 设计器扩展性体系结构

属性编辑体系结构

功能提供程序和功能连接器