1
4
defaultStyleKeyProperty.overrideMetadata(typeof(customControl1),new frameworkProperties(typeof(customControl1)); ->此行所说的是,customControl1在generic.xaml中定义了其默认样式。 然后我进入generic.xaml并删除了为CustomControl1创建的默认样式。 ->这将删除CustomControl1的默认样式 所以你的控件没有样式,所以它不显示任何内容:d 您应该复制日历控件的样式并将TargetType更改为CustomControl1,或者创建新样式并添加Basedon日历,而不是从Generic.xaml中删除样式。 编辑 在下面大卫的回答中添加一点信息,让那些有远见的人了解更多信息。
这就是你所需要的风格。Basedon将负责从默认样式复制所有内容 和 它还将处理不同的主题。如果您从日历的默认主题中复制样式,那么除了从中复制“默认”样式的主题外,您将中断对所有主题的查找。 |
2
1
我找到了我的答案——感谢NVM的帮助!这通常适用于控件,但特别适用于日历控件。如果只修改控件的一部分,则不必包括所有组成控件模板。
但是,您必须包含主控件模板(指向自定义控件),并且必须建立从主控件到要修改的模板的链。对于我的日历控件,我只需要修改
下面是我的generic.xaml文件中的主日历样式声明的外观:
主日历样式的其余部分不变——它是默认样式的副本。 另外,calendarAybutton样式定义必须出现在generic.xaml中的主日历样式定义之前,否则主日历样式将找不到它。 我写了一篇题为 Extending the WPF Calendar Control . 它完成了扩展复杂控件(如WPF日历)的步骤。希望它能帮助其他解决同样问题的人。 |
3
0
顺便说一句,我已经发现了style.basedon属性,它允许您从现有样式派生样式,而不必重复基本样式。有一个 good blog post on it here . |
Kryptonit364 · 在DataGrid中隐藏调整大小和选择列 2 年前 |
hassan Ma · 从顶部将文本插入WPF文本块 2 年前 |
Arijit · 移动画布内绘制的矩形 2 年前 |
juraj14466 · C#WPF实时图表将点渲染为图像 2 年前 |