문제

가질 수 있습니까? 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>

그런 확장을 만들 수 있습니까? 아니면 내가 잘못된 나무를 짖는 것입니까? (위의 코드는 컴파일 및 실행되지 않지만 문제를 가장 잘 설명하기 위해 여기에 게시했습니다).

도움이 되었습니까?

해결책

아니요, 종속성 속성을 종속성 속성 만 추가 할 수 있습니다.

다른 팁

예 .. 그것은 추악한 문제입니다. 그러나 그것은 단순한 직관적 인 대답을 가지고 있습니다. 정적 자원을 얻기 위해 다른 마크 업 확장을 만듭니다. 그래서 사용하는 대신 {StaticResource shapesDS}

당신은 새로운 markupextension을 만들 것입니다 DataSetLocator

코드를 작성하지는 않지만 제공 값은 이름이나 다른 입력에 따라 데이터 세트를 반환해야합니다.

그런 다음 XAML을 변경하여 확장자가 데이터 세트 로케이터 확장자 예제를 사용하도록합니다. Source="{DataSetLocator name=shapesDS }"

확장자가 의존성 추진력을 확장하지는 않지만 그렇지 않은 것은 너무 나쁩니다.

markupextension 대신 imarkupextension을 사용하면 종속성을 확장 할 수 있습니다. 적어도 Silverlight 5에서는 할 수 있지만 WPF도 가지고 있다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top