我正在创建一个源自标准WPF控件之一的自定义控件。控件有几个组成部分,我只修改其中一个部分。
这是我的问题:如果我只修改控件的一部分,我是否必须将控件声明为无外观并为Generic.xaml中的修改控件重现整个控件模板,或者我可以省略无外观声明(在Visual Studio提供的静态构造函数中找到并简单地修改我正在扩展的部分的控件模板?
我尝试了后一种方法,我的控件模板被忽略了。我希望在重现整个控件模板之前得到确认,因为我扩展的是WPF日历。谢谢你的帮助。
答案 0 :(得分:1)
听起来你最好的办法是粘贴整个模板并修改你需要的部分,尽管你没有准确地说出你想做什么或发布任何代码。
显然,如果您想要更改日历的内容有一个属性,您可以在xaml中修改,那么这更容易。相反的极端是创建自定义控件(子类)。
我想在前几天更改颜色或ComboBox箭头,最简单的方法是将整个模板转换为样式并根据需要应用,更改模板的一个部分后(箭头颜色,当然)。没有暴露的DP可以改变这一点,我不需要更复杂的东西。
HTH,
Berryl
答案 1 :(得分:1)
默认情况下为您生成的声明只是允许为您的控件定义默认的隐式Style,而不是仅仅采用基本类型的默认Style。
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl)));
使控件无外观的原因不是任何特定的声明,而是它在代码文件中的定义,然后在运行时将一些ControlTemplate应用于它。另一种方法是UserControl样式,声明一个XAML +代码隐藏类,它可以编译成一个具有UI和逻辑的单个类。
一个简单的例子:按钮不是你在屏幕上看到并点击的东西; Button是一个控件,可以获取单个内容并将用户单击转换为Click事件或Command调用。你在屏幕上看到的只是一个基于Button固有行为和状态的可视化模板。