我想用一些方法和变量扩展System.Windows.Controls.Image
。但据我所知,WPF控制继承被认为是一种不好的做法。
那么,创建一个UserControl
是唯一的方法吗?我真的想避免这种情况,因为它会使元素使用更加复杂(例如,您必须调用UserControl.Image.Source
而不是Image.Source
)。
有没有选择?
答案 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);
}
}