Markupextension 내의 DepedencyProperty
-
10-07-2019 - |
문제
가질 수 있습니까? 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도 가지고 있다고 가정합니다.
제휴하지 않습니다 StackOverflow