我正在创建一个自定义控件。
我希望此控件的模板根据名为CanExpand的依赖项属性的值对根控件使用不同的控件。 CanExpand在自定义控件类中定义。
如果CanExpand为true,我想使用Expander显示:
<ControlTemplate ...>
<Expander ...>
<!--...-->
<ContentPresenter/>
</Expander>
</ControlTemplate>
如果CanExpand为false,我想改为使用HeaderedContentControl显示:
<ControlTemplate ...>
<HeaderedContentControl ...>
<!--...-->
<ContentPresenter/>
</HeaderedContentControl>
</ControlTemplate>
我想过使用DataTemplateSelector,但这是一个ControlTemplate而不是DataTemplate,并且控件的Template没有选择器属性。
我无法使用Trigger将不同的控件设置为可见/隐藏,因为子内容只能在一个控件下生存。另外,我认为您不能使用触发器更改Content属性。
有什么建议吗?
感谢。
答案 0 :(得分:2)
在Style中,将ControlTemplate属性设置为默认状态,然后使用Trigger将ControlTemplate属性设置为其他模板。例如:
<Style ...>
<Setter Property="ControlTemplate">
<ControlTemplate ...>
</ControlTemplate>
</Setter>
<Style.Triggers>
<Trigger Property="YourProperty" Value="WhateverValue">
<Setter Property="ControlTemplate">
<ControlTemplate ...>
</ControlTemplate>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
请记住,您可以在同一属性上触发多个值,每个值都会获得完全不同的模板。