本文将讲解的是WF4属性窗格PropertyGrid扩展,希望对大家了解Windows Workflow Foundation框架有所帮助。
#T#
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扩展
链接:http://www.cnblogs.com/carysun/archive/2009/11/30/WF4-PropertyGridExten.html
下一篇:2010:关于Web的30个预测