在MarkupExtension
派生类中可以有一个DependencyProperty
吗?
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>
有没有可能构建这样一个扩展,或者我是不是找错了地方?(上面的代码无法编译和运行,但我在这里发布它是为了最好地说明这个问题)。
发布于 2009-11-30 08:16:50
不能,您只能向从DependencyObject派生的类添加依赖项属性,MarkupExtention直接从Object派生
发布于 2010-07-23 16:18:42
是啊..这是一个丑陋的问题..然而,它有一个简单而非直观的答案。创建另一个标记扩展来获取静态资源。因此,与其使用{StaticResource shapesDS}
您将创建一个名为DataSetLocator
的新MarkupExtension
我不打算写代码,但是Provide值需要根据名称或其他输入返回数据集。
然后更改xaml以使扩展模块使用数据集定位器扩展模块示例Source="{DataSetLocator name=shapesDS }"
遗憾的是,扩展没有扩展DependencyProperty,但它们确实没有。
发布于 2012-10-11 14:33:04
只需使用IMarkupExtension而不是MarkupExtension,就可以扩展DependencyObject。至少在Silverlight 5中你可以,但我认为WPF也有这个功能。
https://stackoverflow.com/questions/1818033
复制相似问题