2013-03-01 104 views
0

我有一个自定义控件绑定到几个属性,我想分开样式,但我面临一个问题。 基本上它是一个带有ContentControl的按钮。 Button样式依赖于PropertyA(bool),但ContentControls样式依赖于PropertyA和PropertyB(具有5个元素的枚举)。基于绑定改变其外观的子控件的样式

<Button Style="{Binding PropertyA, Converter={StaticResource styleSelector}}"> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      [...] 
      <ContentControl x:Name="cc1"> 
       <ContentControl.Template> 
        <MultiBinding Converter="{StaticResource contentSelector}"> 
         <Binding Path="PropertyA" /> 
         <Binding Path="PropertyB" /> 
        </MultiBinding> 
       </ContentControl.Template> 
      </ContentControl> 
      [...] 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

的风格移到资源

<Style x:Key="ButtonStyleA1" TargetType="Button"> 
    [...] 
</Style> 

<Style x:Key="ButtonStyleA2" TargetType="Button"> 
    [...] 
</Style> 

因为ContentControl中是按钮,它应该可以在ContentControl中的模板移动到ButtonStyleA1ButtonStyleA2,减少依赖性PropertyB的一部分。 我试过在样式中使用<Setter ... TargetName="cc1">,但编译器没有找到cc1。 你有一个简单而干净的解决方案,其中的绑定保留在按钮的想法?

非常感谢!

+0

您是否找到解决方案了? – Marc 2013-03-05 12:14:57

+0

嗨,马克,不是。我仍然使用基于多重绑定的'contentSelector'。 – 2013-03-07 07:57:27

回答

0

最简单的方法可能是在按钮样式中设置Button的ControlTemplate属性。然后,您可以根据需要为按钮定义多种样式,每个样式都包含自己的ControlTemplate,这些样式是根据PropertyA的值选择的。

在每个ControlTemplate中,可以使用样式触发器将内容控件的模板设置为五个模板中的一个。您可以将内容控件的模板定义为Button的ControlTemplate或其他位置的资源,具体取决于您希望如何组织它。

我希望,我得到了你的问题所在,这有助于你的情况..

编辑:

如果您需要从代码中访问您的ContentControl的背后,你可以定义模板件这样做。