我正在WPF中创建一个UserControl,我正在调用YesNoButton。
它有一个DependencyProperty,IsChecked,并包含两个ToggleButtons,标签为“Yes”和“No”。我已将是 ToggleButton的IsChecked属性绑定到父YesNoButton的此IsChecked属性。我通过'反向布尔'IValueConverter将 No ToggleButton的IsChecked属性绑定到是 ToggleButton的IsChecked属性。这是我的YesNoButton标记,减去一些外观和感觉褶边:
<UserControl ...>
<StackPanel Orientation="Horizontal">
<ToggleButton x:Name="YesButton" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type Controls:YesNoButton}}, Path=IsChecked}">Yes</ToggleButton>
<ToggleButton IsChecked="{Binding ElementName=YesButton, Path=IsChecked, Converter={StaticResource BooleanToInverseConverter}}">No</ToggleButton>
</StackPanel>
</UserControl>
在我的应用中,我按如下方式添加YesNoButton:
<local:YesNoButton IsChecked="{Binding Path=BoolPropertyOfDataContext}" />
当窗口首次加载时,如果我通过其他方式切换BoolPropertyOfDataContext,则YesNoButton会做出完美的反应。
但是一旦我单击Yes或No ToggleButton,虽然YesNoButton可视状态正确更新,但是对BoolPropertyOfDataContext的绑定完全停止 - 它似乎被取消了。我认为这些'绑定链'应该可以正常工作,但我显然在这里遗漏了一些东西!
有什么想法吗?
答案 0 :(得分:1)
两个建议:
例如:
<StackPanel Orientation="Horizontal">
<ToggleButton IsChecked="{Binding ElementName=YesNoButton, Path=IsChecked}">Yes</ToggleButton>
<ToggleButton IsChecked="{Binding ElementName=YesNoButton, Path=IsChecked, Converter={StaticResource BooleanToInverseConverter}}">No</ToggleButton>
</StackPanel>
答案 1 :(得分:0)
我通过设置CheckBox的样式来实现它:
<CheckBox IsChecked="{Binding Path=BoolPropertyOfDataContext}" Style="{StaticResource YesNoButton}" />
<Style x:Key="YesNoButton" TargetType="{x:Type CheckBox}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<StackPanel Orientation="Horizontal">
<ToggleButton x:Name="YesButton" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type CheckBox}}, Path=IsChecked}">Yes</ToggleButton>
<ToggleButton IsChecked="{Binding ElementName=YesButton, Path=IsChecked, Converter={StaticResource BooleanToInverseConverter}}">No</ToggleButton>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>