WF4:属性窗格PropertyGrid扩展

简介:

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

namespace CaryPropertyGridExten

{

    public sealed class CaryActivity : CodeActivity

    {       

        public InArgument<string> Text { getset; }

        public double RepeatCount { getset; }

        public string FileName { getset; }          

        protected override void Execute(CodeActivityContext context)

        {                      

        }

    }

}

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

clip_image002

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的构造函数中增加自定义属性的信息如下,关于AttributeTableBuilderMetadataStore的使用可参考关于元数据存储区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());

        }  

 

例子来源:WF_WCF_Samples


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/11/30/WF4-PropertyGridExten.html,如需转载请自行联系原作者

相关文章
|
8月前
[Qt5&控件] 选项卡tabWidget控件隐藏&增加tab个数
[Qt5&控件] 选项卡tabWidget控件隐藏&增加tab个数
524 0
|
C++
Qt动态添加控件并设置大小位置等属性
Qt动态添加控件并设置大小位置等属性
1054 0
|
API Windows 容器
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件(上)
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件
213 0
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件(上)
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件(下)
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件
179 0
附加属性来控制控件中,要扩展模块的visibility
原文:附加属性来控制控件中,要扩展模块的visibility 可解决: 文本框控件中的按钮,DataGridColumnHeader中加入Filter控件。。。 cs文件中的 附加属性 + 样式文件中的 template+控件 -> visibility , 制作出  XAML文件中        1.
814 0
|
C#
WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探
原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探         最近因为项目需要,开始学习如何使用WPF开发桌面程序。
1572 0
|
C#
WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性
原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? 我向大家介绍一个用 依赖属性(DependencyProperty) 实现的方法。
2502 0
|
缓存 前端开发
[UWP]附加属性2:实现一个Canvas
原文:[UWP]附加属性2:实现一个Canvas 5. 附加属性实践:自定义Canvas 附加属性在UWP中是一个十分重要的组成部分,很多功能都依赖于附加属性实现,典型的例子是常用的Grid和Canvas。
1061 0