我是一个ItemsControl的子类(我们称之为EnhancedItemsControl),并且我想公开ScrollViewerTemplate依赖属性,这将允许用户为ScrollViewer使用可选的指定自己的模板。我这样做是这样的:WPF:依赖属性和模板类型 - 在哪里获得默认模板(设置为默认值)?
public ControlTemplate ScrollViewerTemplate
{
get { return (ControlTemplate)GetValue(ScrollViewerTemplateProperty); }
set { SetValue(ScrollViewerTemplateProperty, value); }
}
public static readonly DependencyProperty ScrollViewerTemplateProperty =
DependencyProperty.Register(
"ScrollViewerTemplate",
typeof(ControlTemplate),
typeof(EnhancedItemsControl),
new UIPropertyMetadata(new ScrollViewer().GetValue(ScrollViewer.TemplateProperty))); //This doesn't work for me
在我EnhancedItemsControl我的默认样式,我则包括ScrollViewer中是这样的:
<ScrollViewer
Template="{TemplateBinding ScrollViewerTemplate}"
...
>
<ItemsPresenter
...
/>
</ScrollViewer>
这工作,当用户指定ScrollViewerTemplate,但是当他离开时它在默认值,ScrollViewer不显示(可能是因为它的模板是空的)。我怎样才能告诉WPF 只有当模板非空时才使用模板,否则使用默认模板? (它发生在我身上,我可以使用触发器来设置模板,只有当它不为空时,但我不喜欢触发每个控件中的每个自定义属性的想法......)
样式有类似的问题 - 如果我想让用户指定ScrollViewer样式,但用户没有指定它,ScrollViewerStyle的值将为null(等于<ScrollViewer Style="{x:Null}" />
),这将停止应用默认样式!
如何解决这个问题?谢谢!
谢谢你,你是男人!我不知道我可以从类型索引的资源字典中获取默认样式,这非常不直观 - 再次感谢我的演示,这比在触发器样式/模板不为null时更好。 – 2010-01-03 11:29:10
虽然一切都不确定,但有一点可以肯定,我是男人:) – 2010-01-03 12:01:51