如何在WPF中动态更改ControlTemplate

时间:2014-05-19 22:13:27

标签: c# wpf controltemplate

我正在尝试创建一个继承自Button的自定义控件。在ControlTemplate中,我想将MyCustomButton显示为Circle,Square或其他任何形状的形状。

我有一个DependencyProperty - ButtonShape - 这是一个枚举类型,它指示按钮形状的类型。当用户更改ButtonShape时,必须更改按钮的外观。

我知道如何为我的自定义按钮创建一个ControlTemplate,使其看起来像圆形或方形或椭圆形或任何其他形状,但我不知道如何处理更改的部分。

也许我应该创建其他ControlTemplates并在OnButtenShapeChanged事件中设置相应的模板,但我认为这不是一个正确的方法。

任何想法都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是define triggers in your ControlTemplate。 您需要在(单个)ControlTemplate中定义三个形状,并根据ButtonShape属性的状态显示/隐藏所需的形状。

答案 1 :(得分:0)

我覆盖ControlTemplate属性元数据并添加Coerce回调。然后,在Coerce阶段,返回您想要使用的当前ControlTemplate(基于您的属性)。

在ButtonShape属性值更改后的回调中,您需要调用CoerceValue()来更新ControlTemplate。

这将禁用消费者设置自己的控制模板的能力,但听起来这可能不是问题。

以下是关于依赖属性强制的一些基础知识:http://msdn.microsoft.com/en-us/library/ms745795(v=vs.110).aspx#Coerce_Value_Callbacks_and_Property_Changed_Events