次の方法で共有


プロパティ グリッドの拡張

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

開発者は、デザイナー内で特定のアクティビティを選択したときに表示されるプロパティ グリッドをカスタマイズできます。これにより、高度な編集操作の作成が可能になります。このサンプルでは、その方法を示します。

使用例

ワークフロー デザイナーのプロパティ グリッドの拡張。

Ee834515.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Designer\PropertyGridExtensibility

説明

開発者がプロパティ グリッドを拡張できるように、プロパティ グリッド エディターのインラインの外観をカスタマイズするオプションと、高度な編集画面用のダイアログを表示するオプションが用意されています。このサンプルでは、インライン エディターとダイアログ エディターの 2 種類のエディターを示します。

インライン エディター

インライン エディターのサンプルで示す内容は次のとおりです。

  • PropertyValueEditor から派生する型を作成します。

  • コンストラクターで、Windows Presentation Foundation (WPF) データ テンプレートを使用して InlineEditorTemplate 値を設定します。これは XAML テンプレートにバインドできますが、このサンプルではコードを使用してデータ バインディングを初期化します。

  • プロパティ グリッドに表示される項目の PropertyValue のデータ コンテキストは、データ テンプレートに含まれています。次のコード (CustomInlineEditor.cs のコード) で、このコンテキストが Value プロパティにバインドされていることに注意してください。

    FrameworkElementFactory stack = new FrameworkElementFactory(typeof(StackPanel));
    FrameworkElementFactory slider = new FrameworkElementFactory(typeof(Slider));
    Binding sliderBinding = new Binding("Value");
    sliderBinding.Mode = BindingMode.TwoWay;
    slider.SetValue(Slider.MinimumProperty, 0.0);
    slider.SetValue(Slider.MaximumProperty, 100.0);
    slider.SetValue(Slider.ValueProperty, sliderBinding);
    stack.AppendChild(slider);
    
  • アクティビティとデザイナーが同じアセンブリにあるため、アクティビティ デザイナーの属性の登録は、アクティビティ自体の静的コンストラクターで行われます。SimpleCodeActivity.cs の例を次に示します。

    static SimpleCodeActivity()
    {
        AttributeTableBuilder builder = new AttributeTableBuilder();
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "RepeatCount", new EditorAttribute(typeof(CustomInlineEditor), typeof(PropertyValueEditor)));
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "FileName", new EditorAttribute(typeof(FilePickerEditor), typeof(DialogPropertyValueEditor)));
        MetadataStore.AddAttributeTable(builder.CreateTable());
    }
    

ダイアログ エディター

ダイアログ エディターのサンプルで示す内容は次のとおりです。

  1. DialogPropertyValueEditor から派生する型を作成します。

  2. コンストラクターで、WPF データ テンプレートを使用して InlineEditorTemplate 値を設定します。これは XAML で作成できますが、このサンプルではコードで作成します。

  3. プロパティ グリッドに表示される項目の PropertyValue のデータ コンテキストは、データ テンプレートに含まれています。次のコードで、これが Value プロパティにバインドされています。FilePickerEditor.cs では、ダイアログを起動するボタンを指定するための EditModeSwitchButton を含めることも重要です。

    this.InlineEditorTemplate = new DataTemplate();
    
    FrameworkElementFactory stack = new FrameworkElementFactory(typeof(StackPanel));
    stack.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
    FrameworkElementFactory label = new FrameworkElementFactory(typeof(Label));
    Binding labelBinding = new Binding("Value");
    label.SetValue(Label.ContentProperty, labelBinding);
    label.SetValue(Label.MaxWidthProperty, 90.0);
    
    stack.AppendChild(label);
    
    FrameworkElementFactory editModeSwitch = new FrameworkElementFactory(typeof(EditModeSwitchButton));
    
    editModeSwitch.SetValue(EditModeSwitchButton.TargetEditModeProperty, PropertyContainerEditMode.Dialog);
    
    stack.AppendChild(editModeSwitch);
    
    this.InlineEditorTemplate.VisualTree = stack;
    
  4. ダイアログの表示を処理するデザイナー型の ShowDialog メソッドをオーバーライドします。このサンプルでは、基本的な FileDialog を示します。

    public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource)
    {
        Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
        if (ofd.ShowDialog() == true)
        {
            propertyValue.Value = ofd.FileName;
        }
    }
    
  5. アクティビティとデザイナーが同じアセンブリにあるため、アクティビティ デザイナーの属性の登録は、アクティビティ自体の静的コンストラクターで行われます。SimpleCodeActivity.cs の例を次に示します。

    static SimpleCodeActivity()
    {
        AttributeTableBuilder builder = new AttributeTableBuilder();
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "RepeatCount", new EditorAttribute(typeof(CustomInlineEditor), typeof(PropertyValueEditor)));
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "FileName", new EditorAttribute(typeof(FilePickerEditor), typeof(DialogPropertyValueEditor)));
        MetadataStore.AddAttributeTable(builder.CreateTable());
    }
    

サンプルを設定、ビルド、および実行するには

  1. ソリューションをビルドし、Workflow1.xaml を開きます。

  2. SimpleCodeActivity フォームをツールボックスからデザイナー キャンバスにドラッグします。

  3. SimpleCodeActivity をクリックし、プロパティ グリッドを開きます。スライダー コントロールとファイル選択コントロールが表示されます。

Ee834515.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Designer\PropertyGridExtensibility