2017-08-10 52 views
0

我是新來的WPF樣式,我不能讓下一件事工作: 我有一個自定義複選框樣式與其中的複選框。我需要父級「IsChecked」值更改爲ControlTemplate中的「contolCheckBox」子級更改。 嘗試不同的觸發器,但無法獲取父級屬性。 現在我下XAML代碼:在WPF風格如何更正綁定父級複選框屬性到一個孩子?

<Style x:Key="CustomCheckBox" TargetType="{x:Type CheckBox}"> 
    <Setter Property="Height" Value="27" /> 
    <Setter Property="Foreground" Value="#FFBABAC7" /> 
    <Setter Property="HorizontalContentAlignment" Value="Left"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type CheckBox}"> 
       <Grid> 
        <CheckBox x:Name="contolCheckBox" HorizontalAlignment="Right" VerticalAlignment="Center"/> 
        <ContentPresenter HorizontalAlignment="Left" VerticalAlignment="Center"/> 
       </Grid> 
      </ControlTemplate> 

     </Setter.Value> 
    </Setter> 

    <Setter Property="IsChecked" Value="{Binding IsChecked, ElementName=contolCheckBox}"/> 
    <!----> 
    <Style.Triggers> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter Property="Foreground" Value="#FF29E200"/> 
     </Trigger> 
     <Trigger Property="IsChecked" Value="False"> 
      <Setter Property="Foreground" Value="Firebrick"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

「器isChecked」控制不`噸的變化值。 我在做什麼錯?

Binding ElementName=contolCheckBox, Path=IsChecked 

不工作。

+0

嘗試'Value =「{Binding Mode = TwoWay,ElementName = controlCheckBox,Path = IsChecked}」' –

+0

不幸的是,它並不幫助 – Zahar

回答

0

我不認爲controlCheckBox是在名稱範圍內,因爲它在ControlTemplate內聲明。所以你的綁定不起作用。相反,反轉你的綁定並從下到上綁定。你在像這樣的尋找中尋找的是模板綁定。試試這個在您的ControlTemplate ..

<CheckBox x:Name="contolCheckBox" HorizontalAlignment="Right" VerticalAlignment="Center" 
      IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked, Mode=TwoWay}" /> 

注意RelativeSouce結合。這表明我想要綁定到模板的父項。這是將基本ControlTemplate控件綁定到父屬性的常用方法。

+0

非常感謝!它的工作。沒有嘗試過這種方式,因爲我認爲這種方式將從父母綁定到孩子,並忘記了雙向模式,否則工作。 – Zahar

相關問題