创建一个具有按钮外观的复选框

问题描述 投票:0回答:1

我正在尝试创建一个具有按钮外观的复选框。当我设置 ToggleButton 的内容时,它会更改复选框文本,但是当我更改 IsChecked 时,它不会在复选框中更新。如何实施。使用 Button 是可以的,但我需要定义一个依赖属性(我不知道如何更新 setter 中复选框的 IsChecked),因为 Button 没有 IsChecked。

[1]: https://i.sstatic.net/kE2TIYOb.png

    <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>
c# wpf button checkbox
1个回答
0
投票

考虑到您要求有一个内部带有复选框的“按钮”,您可以创建一个带有复选框的 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>

或者,您可以仅使用切换按钮来实现此功能,除非您需要这种特定设计(复选框)。

© www.soinside.com 2019 - 2024. All rights reserved.