2016-09-06 33 views
1

System.Windows.Controls.Imageにいくつかのメソッドと変数を追加します。しかし、私が知る限り、WPFは継承を悪い習慣とみなします。WPFコントロールクラスを拡張する

したがって、唯一の方法はUserControlですか?私は本当にこれを避けたいと思います。なぜなら、要素の使用がより複雑になるからです(たとえば、Image.Sourceの代わりにUserControl.Image.Sourceと呼ぶ必要があります)。

オプションはありますか?

+1

あなたはいじったときにすることを 'Source'と呼ばれる依存関係プロパティを公開することができ、あなたの_inner_はあなたが何をしたいメソッドや変数の詳細特異的であることができる' Image.Source' – MickyD

+1

触れますか? * "WPFは継承を悪い習慣とみなします" * - まったく真実ではありません - WPFは単に柔軟性があり、何かをサブスクラスする必要はほとんどありません。 – Sinatr

+0

@MickyDはい、わかっています。しかし、私はちょうどImageクラスでいくつかの余分なメソッドが必要なときに、全体のUserControlを使用すると、多くの不必要なものをもたらします。 – JustLogin

答えて

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); 
    } 
} 
+1

このコンセプトでメソッドを追加することは可能ですか?たとえば、私のクラスにFadeOutのpublic関数を持たせたいとします。この関数は、Imageに特定のアニメーションを再生させます。 – JustLogin

1

静的クラスの拡張メソッドはどうですか?例については

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

これは可能な方法ですが、特定のメソッド(特定のアニメーションはクラス内でのみ* 1つのクラスでのみ使用されます)をクラス内に直接保持することをお勧めします。 – JustLogin

+0

@JustLogin私はWPFの専門家ではありません。 IMMO、CustomImageクラスを作成し、System.Windows.Controls.Image ..;から継承します) – Andrea

関連する問題