我正在创建一个自定义控件。

我希望此控件的模板根据名为CanExpand的依赖项属性的值对根控件使用不同的控件。 CanExpand在自定义控件类中定义。

如果CanExpand为true,我想使用Expander显示:

<ControlTemplate ...>
   <Expander ...>
      <!--...-->
      <ContentPresenter/>
   </Expander>
</ControlTemplate>

如果CanExpand为false,我想改为使用HeaderedContentControl显示:

<ControlTemplate ...>
   <HeaderedContentControl ...>
      <!--...-->
      <ContentPresenter/>
   </HeaderedContentControl>
</ControlTemplate>

我想过使用DataTemplateSelector,但这是一个ControlTemplate而不是DataTemplate,并且控件的Template没有选择器属性。

我无法使用Trigger将不同的控件设置为可见/隐藏,因为子内容只能在一个控件下生存。另外,我认为您不能使用触发器更改Content属性。

有什么建议吗?

感谢。

有帮助吗?

解决方案

在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>

请记住,您可以在同一属性上触发多个值,每个值都会获得完全不同的模板。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top