WPF:如何制作一个“pushlike”复选框?

时间:2009-06-18 16:38:27

标签: wpf button checkbox controltemplate

我想制作一个看起来与按钮完全相同的CheckBox。我最初的微弱尝试根本不起作用。

<CheckBox x:Name="test">
    Testing!
    <CheckBox.Template>
        <ControlTemplate>
            <Button>
                <ContentPresenter/>
            </Button>
        </ControlTemplate>
    </CheckBox.Template>
</CheckBox>

ContentPresenter无效(按钮为空),单击该按钮时,IsChecked属性不会切换。另外,当IsChecked为真时,我不知道如何按下按钮。

3 个答案:

答案 0 :(得分:13)

ToggleButton会满足您的需求吗? CheckBox源自它,因此它们非常相似。

答案 1 :(得分:6)

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

<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>
        <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 :(得分:2)

我同意ToggleButton是可行的方法,但如果您希望您的内容显示在您的示例中,请尝试将ContentPresenter声明更改为:

<ContentPresenter Content="{TemplateBinding Content}" />