我正在继承一个 ItemsControl(我们称之为 EnhancedItemsControl),并且我想公开 ScrollViewerTemplate 依赖属性,这将允许用户有选择地为使用的 ScrollViewer 指定他自己的模板。我这样做是这样的:
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(可能是因为它的 Template 为空)。如何告诉 WPF仅在非空时使用模板,否则使用默认模板?(我突然想到,只有当模板不为空时,我才能使用触发器来设置模板,但我不喜欢为每个控件中的每个自定义属性都设置触发器的想法......)
样式也有类似的问题——如果我想让用户指定 ScrollViewer 样式,但用户没有指定,则 ScrollViewerStyle 的值为 null(等于<ScrollViewer Style="{x:Null}" />
),这将阻止应用默认样式!
如何解决这个问题?谢谢!