2013-03-01 138 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的背後,你可以定義模板件這樣做。