基于WpfToolKit 自定义属性编辑

Xceed.Wpf.Toolkit 中对 ITypeEditor进行了封装封装后的类为TypeEditor<T> ,我们可以通过这个类来达到自定义的目的。 属性栏中显示成什么样,可以通过自己定义一个相应的控件来实现,或者使用现有的控件。示例如下

我这里是通过继承Button来实现的

    /// <summary>
    /// ImageSelectControl.xaml 的交互逻辑
    /// </summary>
    public partial class ImageSelectButton : Button
    {
        static ImageSelectButton()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageSelectButton), new FrameworkPropertyMetadata(typeof(ImageSelectButton)));
        }

        public ImageSelectButton()
        {
            InitializeComponent();
            DataContext = this;
            this.Click += ImageSelectButton_Click;
        }

        public string SelectPath
        {
            get { return (string)GetValue(SelectPathProperty); }
            set { SetValue(SelectPathProperty, value); }
        }

        // Using a DependencyProperty as the backing store for Path.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty SelectPathProperty =
            DependencyProperty.Register("SelectPath", typeof(string), typeof(ImageSelectButton), new PropertyMetadata(""));





        private void ImageSelectButton_Click(object sender, RoutedEventArgs e)
        {
        //Todo。。。。。
        }

    }

在Xaml里面可以自定义显示成什么样
Xaml如下:

    <Button.Resources>
        <Style  TargetType="{x:Type local:ImageSelectButton}">
            <Setter Property="Background" Value="White" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="Padding"  Value="2,0,0,0" />
            <Setter Property="HorizontalContentAlignment" Value="Left" />
            <Setter Property="VerticalContentAlignment"  Value="Center" />
            <Setter Property="SnapsToDevicePixels" Value="True" />
            <Setter Property="MinHeight" Value="22" />
            <Setter Property="IsTabStop" Value="True" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid SnapsToDevicePixels="True">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>

                                <Border Background="{TemplateBinding Background}"
                             BorderBrush="{TemplateBinding BorderBrush}"
                             BorderThickness="{TemplateBinding BorderThickness}"
                             Padding="{TemplateBinding Padding}"
                             SnapsToDevicePixels="True">
                                    <ContentPresenter Content="{Binding SelectPath, RelativeSource={RelativeSource TemplatedParent}}"
                                          ContentTemplate="{TemplateBinding ContentTemplate}"
                                          ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
                                </Border>

                                <exitToolkit:ButtonChrome x:Name="ToggleButtonChrome"
                                          Grid.Column="1"
                                          CornerRadius="0,2.75,2.75,0"
                                          RenderEnabled="{Binding IsEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:ImageSelectButton}}"
                                          RenderMouseOver="{TemplateBinding IsMouseOver}">
                                    <Grid x:Name="arrowGlyph" IsHitTestVisible="False" Grid.Column="1" Margin="5">
                                        <TextBlock Text="....."/>
                                    </Grid>
                                </exitToolkit:ButtonChrome>
                            </Grid>

                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Foreground" Value="Gray" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    </Button.Resources>

设置对应属性的Attribute就可以

    public class ImageEditor : TypeEditor<ImageSelectButton>
    {
        protected override void SetControlProperties()
        {

        }
        protected override void SetValueDependencyProperty()
        {
            ValueProperty = ImageSelectButton.SelectPathProperty;
        }
    }

    public class PropertyGridEditorImageSelect : ImageSelectButton
    {
        static PropertyGridEditorImageSelect()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(PropertyGridEditorImageSelect), new FrameworkPropertyMetadata(typeof(PropertyGridEditorImageSelect)));
        }
    }

使用方式:

 [EditorAttribute(typeof(ImageEditor), typeof(ImageEditor))]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值