2017-08-10 46 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

相关问题