我正在尝试创建一个具有按钮外观的复选框。当我设置 ToggleButton 的内容时,它会更改复选框文本,但是当我更改 IsChecked 时,它不会在复选框中更新。如何实施。使用 Button 是可以的,但我需要定义一个依赖属性(我不知道如何更新 setter 中复选框的 IsChecked),因为 Button 没有 IsChecked。
<ControlTemplate x:Key="CheckButtonTemplate" TargetType="{x:Type ContentControl}">
<ToggleButton Content="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content}">
<ToggleButton.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content}"
IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent},Path=IsChecked}"/>
</StackPanel>
</DataTemplate>
</ToggleButton.ContentTemplate>
</ToggleButton>
</ControlTemplate>
</UserControl.Resources>
<Grid>
<ToggleButton Template="{StaticResource CheckButtonTemplate}" Content="Test" IsChecked="True"/>
</Grid>
考虑到您要求有一个内部带有复选框的“按钮”,您可以创建一个带有复选框的 ToggleButton 以包含视觉效果,而不是制作自定义样式的复选框,并将复选框的 IsChecked 绑定到父级.
这是实现此目的的 XAML 块示例。
<ToggleButton>
<StackPanel Orientation="Horizontal">
<CheckBox IsHitTestVisible="False"
IsChecked="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=ToggleButton}, Mode=OneWay}" />
<TextBlock Text="My Toggle Option"
Margin="5,0,0,0" />
</StackPanel>
</ToggleButton>
或者,您可以仅使用切换按钮来实现此功能,除非您需要这种特定设计(复选框)。