扩展WPF控件类

时间:2016-09-06 11:37:04

标签: c# wpf xaml inheritance

我想用一些方法和变量扩展System.Windows.Controls.Image。但据我所知,WPF控制继承被认为是一种不好的做法。

那么,创建一个UserControl是唯一的方法吗?我真的想避免这种情况,因为它会使元素使用更加复杂(例如,您必须调用UserControl.Image.Source而不是Image.Source)。

有没有选择?

2 个答案:

答案 0 :(得分:1)

静态类中的扩展方法怎么样?

例如:

public static class ExtensionMethods
{
    public static bool MyExtendedMethod(this System.Windows.Controls.Image source)
    {
        // do something
        return true;
    }
}

答案 1 :(得分:0)

如何使用attached properties和相关的PropertyChangedCallback方法来实现所需的功能。例如:

public class ImageProperties
{
    public static readonly DependencyProperty ByteEncodedStringProperty = DependencyProperty.RegisterAttached("ByteEncodedString", typeof(string), typeof(ImageProperties), new PropertyMetadata(null, ByteEncodedStringPropertyChanged));

    private static void ByteEncodedStringPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
    {
        Image image = sender as Image;

        if (image != null)
        {
            ImageSource imageSource = DecodeByteEncodedStringImage(args.NewValue);

            image.Source = imageSource;
        }
    }

    public static string GetByteEncodedString(DependencyObject obj)
    {
        return (string)obj.GetValue(ByteEncodedStringProperty);
    }

    public static void SetByteEncodedString(DependencyObject obj, string value)
    {
        obj.SetValue(ByteEncodedStringProperty, value);
    }
}