-1

WPFプロジェクトには、個々のMarginプロパティを設定し、他の値を保存できるようにするための一連のコントロールがあります。Thicknessしたがって、完全なマージンを新しい( )に設定することは避けたいと思いMargin="0,5,0,15"ます。多くのマージンはスタイルなどから設定されているためです。しかし、個々のケースでは、特定のコントロールの一般的なスタイルから逸脱したいと思います。

このように.NETクラスにいくつかの新しい依存関係プロパティを登録してみませんかFrameWorkElement(たとえば、MarginLeftのみが表示されています)。

public class FrameWorkElementExtensions: FrameworkElement
{
    public static readonly DependencyProperty MarginLeftProperty = DependencyProperty.Register("MarginLeft", typeof(Int16?), typeof(FrameworkElement), new PropertyMetadata(null, OnMarginLeftPropertyChanged));
    public Int16? MarginLeft
    {
        get { return (Int16?)GetValue(MarginLeftProperty); }
        set { SetValue(MarginLeftProperty, value); }
    }

    private static void OnMarginLeftPropertyChanged(object obj, DependencyPropertyChangedEventArgs e)
    {
        if (obj != null && obj is UIElement)
        {
            FrameworkElement element = (FrameworkElement)obj;

            element.Margin = new Thickness((Int16?)e.NewValue ?? 0, element.Margin.Top, element.Margin.Right, element.Margin.Bottom);
        }
    }
}

ただし、このプロパティは、分離コードまたはXAMLでは使用できません。このダミークラスはインスタンス化されないので、どういうわけか理解できます。静的クラスにしようとしましたが、FrameWorkElement(GetValueメソッドとSetValueメソッドに必要)から派生できません。

より一般的な質問を扱うリソースがネット上に見つかりませんでした。既存の.NETクラスに依存関係プロパティを追加できますか?

任意のヘルプ/賢明なアドバイスをいただければ幸いです。

ところで:マージン(厚さ)の1つのコンポーネントのみを変更するためのソリューションも高く評価されています;)

4

2 に答える 2

4

所有していないオブジェクトに設定するプロパティを定義する場合は、アタッチされたプロパティを定義する必要があります。その場合は、 Registerの代わりにRegisterAttachedメソッドを使用します。また、プロパティをインスタンスプロパティとしてではなく、静的get / setメソッドとして定義します。これは、オブジェクトのインスタンスではなく、不明なフレームワーク要素に設定されるためです。リンクのヘルプトピックに例が示されています。他のコメントのリンクも、より多くの情報と例を提供します。

于 2013-01-14T13:26:57.953 に答える
-1

マージンの1つのコンポーネントのみを変更する場合は、xaml Margin = "1,2,3,4"で使用します。ここで、1-左、2-上、3-右、4-下

于 2013-01-14T13:15:15.237 に答える