Czy można uzyskać DependencyProperty
w klasie pochodnej MarkupExtension
?DepedencyProperty wewnątrz 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
}
}
}
Rozszerzenie jest używane w poniższym fragmencie.
<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>
Czy można nawet zbudować takie przedłużenie, czy też właśnie szczerzę złe drzewo? (powyższy kod zostanie skompilowany i uruchomiony, ale opublikowałem go tutaj, aby najlepiej zilustrować problem).
W takim przypadku co z wiążącym rozszerzeniem znaczników? Jego właściwości można powiązać samodzielnie, więc są to właściwości zależności. – Narek
@Narek - zgodnie z MSDN rozszerzenie powiązania znaczników nie ma właściwości zależności, ma to sens, ponieważ nie można zaimplementować właściwości zależności bez wywoływania DependencyObject.SetValue i DependencyObject.GetValue i nie można wywoływać tych bez dziedziczenia z DependencyObject. także, nie mogę przetestować tego teraz, ale nie sądzę, że możesz użyć wiązania na własność wiązania, to znaczy nie możesz {Binding Converter = {Binding ...}} – Nir
W rzeczywistości nie mam jakiekolwiek doświadczenie w WPF, ale w Silverlight 5 zdecydowanie możliwe jest użycie wiązania na własność wiązania. Oto przykład: "{Binding UserName, RelativeSource = {RelativeSource FindAncestor, AncestorType = UserControl}}". – Narek