11

派生クラスDependencyProperty内に を含めることは可能ですか?MarkupExtension

public class GeometryQueryExtension : MarkupExtension
{
    public XmlDataProvider Source { get; set; }

    public string XPath { get; set; }

    public static readonly DependencyProperty ArgumentProperty = DependencyProperty.RegisterAttached(
        "Argument",
        typeof(string),
        typeof(GeometryQueryExtension)); // this wont work because GeometryQueryExtension is not a DependencyProperty

    public string Argument
    {
        get
        {
            return (string)GetValue(ArgumentProperty); // this wont even compile because GeometryQueryExtension doesnt derive from a class which has GetValue
        }
        set
        {
            SetValue(ArgumentProperty,value);// this wont even compile because GeometryQueryExtension doesnt derive from a class which has SetValue
        }
    }
}

この拡張機能は、次のスニペットで使用されています。

<Label.Content>
    <local:GeometryQueryExtension Source="{StaticResource shapesDS}">
        <local:GeometryQueryExtension.XPath>
            /Shapes/Geometry/{0}
        </local:GeometryQueryExtension.XPath>
        <local:GeometryQueryExtension.Argument>
            <Binding XPath="Geometry"/> <!-- will throw exception when processing this bind -->
        </local:GeometryQueryExtension.Argument>
    </local:GeometryQueryExtension>
</Label.Content>

そのような拡張機能を構築することさえ可能ですか、それとも間違ったツリーを吠えているだけですか? (上記のコードはコンパイルおよび実行されませんが、問題を最もよく説明するためにここに投稿しました)。

4

3 に答える 3

5

いいえ、DependencyObject から派生したクラスにのみ依存関係プロパティを追加できます。MarkupExtention は Object から直接派生します。

于 2009-11-30T08:16:50.123 に答える
0

ええ..それは醜い問題です..しかし、それは単純で直感的でない答えを持っています。別のマークアップ拡張機能を作成して、静的リソースを取得します。したがって、使用する代わりに{StaticResource shapesDS}

と呼ばれる新しいMarkupExtensionを作成しますDataSetLocator

コードを記述するつもりはありませんが、Provide値は、名前またはその他の入力に基づいてデータセットを返す必要があります。

次に、xamlを変更して、拡張機能でデータセットロケーター拡張機能の例を使用するようにします。Source="{DataSetLocator name=shapesDS }"

拡張機能がDependencyPropertyを拡張しないのは残念ですが、拡張しません。

于 2010-07-23T16:18:42.170 に答える
-1

MarkupExtension の代わりに IMarkupExtension を使用するだけで、DependencyObject を拡張できます。少なくともSilverlight 5では可能ですが、WPFにもあると思います。

于 2012-10-11T14:33:04.303 に答える