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
.
解决方案
有没有办法
Nothing
用资源字典中的模板交换默认值?
如果将默认值添加DataTemplate
到App.xaml
文件中,则应该可以:
Public Shared ReadOnly SubTemplateProperty As DependencyProperty =
DependencyProperty.Register("SubTemplate", GetType(DataTemplate), GetType(MyControl), New FrameworkPropertyMetadata(Application.Current.Resources("KeyOfTemplate")))
如果您想对事物进行更多控制,您可以编写一些查找模板的代码,例如在OnApplyTemplate
控件的方法中。您可能想从其他地方获取它,检查它是否确实存在,等等。
推荐阅读
- excel - 使用 Headers Apache POI Spring Boot 读取 Excel 文件
- unity3d - 如何统一实现AppLovin Reward Video?
- file - File not found 抛出异常,即使给出正确的路径
- scala - 无法打印scala字数
- excel - VBA 动态注释创建
- r - 从 R 中的 *.txt 文件中提取文本
- java - 请求的纹理尺寸 JavaFX
- c# - 在 StreamWriter 前面使用“使用”
- c# - 尽可能快地在 DataTable 中找到匹配的记录
- php - nginx 错误:图像的 openat() 失败(20:不是目录)