在WPF风格如何更正绑定父级复选框属性到一个孩子?
问题描述:
我是新来的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
不工作。
答
我不认为controlCheckBox
是在名称范围内,因为它在ControlTemplate
内声明。所以你的绑定不起作用。相反,反转你的绑定并从下到上绑定。你在像这样的寻找中寻找的是模板绑定。试试这个在您的ControlTemplate
..
<CheckBox x:Name="contolCheckBox" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked, Mode=TwoWay}" />
注意RelativeSouce
结合。这表明我想要绑定到模板的父项。这是将基本ControlTemplate
控件绑定到父属性的常用方法。
+0
非常感谢!它的工作。没有尝试过这种方式,因为我认为这种方式将从父母绑定到孩子,并忘记了双向模式,否则工作。 – Zahar
尝试'Value =“{Binding Mode = TwoWay,ElementName = controlCheckBox,Path = IsChecked}”' –
不幸的是,它并不帮助 – Zahar