WPF:如何制作“推动式”复选框?

9
我想制作一个看起来像按钮的复选框。我最初的尝试根本不起作用。
<CheckBox x:Name="test">
    Testing!
    <CheckBox.Template>
        <ControlTemplate>
            <Button>
                <ContentPresenter/>
            </Button>
        </ControlTemplate>
    </CheckBox.Template>
</CheckBox>

ContentPresenter没有起作用(按钮为空),当按钮被点击时,IsChecked属性不会切换。此外,我不知道如何使按钮在IsChecked为true时看起来被按下。

3个回答

13

您是否需要使用ToggleButton? CheckBox继承自它,因此它们非常相似。


是的,我不知道已经有一个看起来像按钮的复选框的单独类了。 - Qwertie

7

我刚刚开始写同样的评论 :)

<ToggleButton Name="tb"  Height="45" Width="45">
        <ToggleButton.Style>
            <Style TargetType="{x:Type ToggleButton}">
                <Setter Property="Content" Value="False"/>
                <Style.Triggers>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Content" Value="True"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ToggleButton.Style>
    </ToggleButton>

现在按照您的要求,复选框控件:

<CheckBox>
        <CheckBox.Template>
            <ControlTemplate TargetType="CheckBox">
                <ToggleButton x:Name="toggleButton">
                </ToggleButton>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="True" SourceName="toggleButton">
                        <Setter Property="Content" Value="True"/>
                    </Trigger>
                    <Trigger Property="Content" Value="True">
                        <Setter Property="IsChecked" Value="True"/>
                    </Trigger>
                </ControlTemplate.Triggers>
             </ControlTemplate>
        </CheckBox.Template>
    </CheckBox>

2
我同意使用ToggleButton,但如果你想在示例中显示内容,请将ContentPresenter声明更改为以下内容:
<ContentPresenter Content="{TemplateBinding Content}" />

如果我将ControlTemplate声明更改为<ControlTemplate TargetType="{x:Type CheckBox}">,这将起作用。 - Qwertie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接