千家信息网

如何进行WF4属性窗格PropertyGrid扩展

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,今天就跟大家聊聊有关如何进行WF4属性窗格PropertyGrid扩展,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 我们有一个CaryA
千家信息网最后更新 2025年01月16日如何进行WF4属性窗格PropertyGrid扩展

今天就跟大家聊聊有关如何进行WF4属性窗格PropertyGrid扩展,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. 我们有一个CaryActivity活动如下:

namespace CaryPropertyGridExten  {      public sealed class CaryActivity : CodeActivity      {                  public InArgument Text { get; set; }          public double RepeatCount { get; set; }         public string FileName { get; set; }                     protected override void Execute(CodeActivityContext context)          {                                 }      }  }

2. 上面活动有RepeatCount和FileName属性,我们会为这两个属性在属性窗格的设置自定义属性值编辑器,要达到效果如下图:

3. 分别定义两个属性对应的属性值编辑器如下:

namespace CaryPropertyGridExten  {      class CustomInlineEditor : PropertyValueEditor
  • {

  • public CustomInlineEditor()

  • {

  • this.InlineEditorTemplate = new DataTemplate();

  • 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);

  • FrameworkElementFactory textb = new FrameworkElementFactory(typeof(TextBox));

  • Binding textBinding = new Binding("Value");

  • textb.SetValue(TextBox.TextProperty, textBinding);

  • textb.SetValue(TextBox.IsEnabledProperty, false);

  • stack.AppendChild(textb);

  • this.InlineEditorTemplate.VisualTree = stack;

  • }

  • }

  • }

  • namespace CaryPropertyGridExten

  • {

  • class FilePickerEditor : DialogPropertyValueEditor

  • {

  • public FilePickerEditor()

  • {

  • 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;

  • }

  • public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource)

  • {

  • Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();

  • if (ofd.ShowDialog() == true)

  • {

  • propertyValue.Value = ofd.FileName.Substring(ofd.FileName.LastIndexOf('\\') + 1);

  • }

  • }

  • }

  • }

  • 4. 在CaryActivity的构造函数中增加自定义属性的信息如下,关于AttributeTableBuilder及MetadataStore的使用可参考关于元数据存储区MetadateStore及AttributeTableBuilder这篇文章。

    public CaryActivity()        {            AttributeTableBuilder builder = new AttributeTableBuilder();
  • builder.AddCustomAttributes(typeof(CaryActivity), "RepeatCount", new EditorAttribute(typeof(CustomInlineEditor), typeof(PropertyValueEditor)));

  • builder.AddCustomAttributes(typeof(CaryActivity), "FileName", new EditorAttribute(typeof(FilePickerEditor), typeof(DialogPropertyValueEditor)));

  • MetadataStore.AddAttributeTable(builder.CreateTable());

  • }


看完上述内容,你们对如何进行WF4属性窗格PropertyGrid扩展有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0