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 クラスを使用すると、このプロセスに独自のロジックを挿入できます。たとえば、ユーザーがコントロールの Visible プロパティを false に設定できるようにする一方で、デザイン時にはそのコントロールが引き続き表示されている必要がある場合があります。

これを実現するには、DesignModeValueProvider を作成して、カスタム コントロールにアタッチします。DesignModeValueProvider がユーザーによって加えられたプロパティの変更をキャプチャし、TranslatePropertyValue メソッドに独自のロジックを挿入すると、DesignModeValueProvider が新しい値をデザイナに渡します。

重要 :

この方法を使用した場合、デザイナ内でのプロパティの動作が、XAML ビュー内のプロパティの値と一致しません。XAML ビューには、デザイン時にユーザーが入力した値が表示されます。XAML ビュー内の値は、実行時にプロパティが示す動作を表します。

カスタム ボタン コントロールにアタッチされるカスタム DesignModeValueProvider を作成する例を次に示します。TranslatePropertyValue メソッドで、ButtonContent プロパティを変更して、デザイナに大文字で表示されるようにします。ButtonBackground プロパティも変更して、デザイナに既定のシステム カラーで表示されるようにします。これらの変更は、デザイナにのみ影響します。実行時には、Content プロパティおよび Background プロパティが、ユーザーが設定した値と共に表示されます。

詳細については、「チュートリアル : デザイン時のプロパティ動作の変更」を参照してください。


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 デザイナの機能拡張アーキテクチャ

プロパティ編集アーキテクチャ

機能プロバイダと機能コネクタ