从资源字典中为依赖项属性提供默认值的最佳方法是什么

时间:2019-05-16 15:02:41

标签: wpf

我想创建一个WPF用户控件(或自定义控件)。该控件的用户应该能够重新模板此控件的特定部分。为此,我创建了一个名为“ SubTemplate”的依赖项属性。

Public Shared ReadOnly SubTemplateProperty As DependencyProperty =
    DependencyProperty.Register("SubTemplate", GetType(DataTemplate), GetType(MyControl), New FrameworkPropertyMetadata(Nothing))

当然,当用户不提供自己的模板时,应该使用默认模板。但是,如何将此默认值赋予依赖项属性?

我想在XAML中定义此默认模板(可能在资源字典中,也许在Themes \ Generic.xaml中?)

是否可以通过资源字典中的模板与Nothing交换默认值?

还是我必须在控件的构造函数中设置默认值(仍然不知道如何在后面的代码中从资源字典访问命名模板,FindResource似乎无效或我使用错了。)

还是我必须设置用于将模板添加到控件的重新模板化部分的绑定的TargetNullValue

现在,我只是以控件的默认样式设置了“ SubTemplate”属性,但是如果用户重新设置整个控件的样式并忘记提供“ SubTemplate”,那么它将为Nothing

1 个答案:

答案 0 :(得分:0)

  

是否可以通过资源字典中的模板与Nothing交换默认值?

如果您将默认的DataTemplate添加到App.xaml文件中,则应该可以:

Public Shared ReadOnly SubTemplateProperty As DependencyProperty =
DependencyProperty.Register("SubTemplate", GetType(DataTemplate), GetType(MyControl), New FrameworkPropertyMetadata(Application.Current.Resources("KeyOfTemplate")))

如果您想对事物进行更多控制,则可以编写一些代码来查找模板,例如在控件的OnApplyTemplate方法中。您可能想从其他地方获取它,检查它是否确实存在,等等。