9

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

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

ContentPresenter 不起作用(按钮为空),单击按钮时,IsChecked 属性不会切换。另外,当 IsChecked 为真时,我不知道如何使按钮看起来被按下。

4

3 回答 3

13

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

于 2009-06-18T16:45:27.010 回答
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>
于 2009-06-18T16:49:20.253 回答
2

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

<ContentPresenter Content="{TemplateBinding Content}" />
于 2009-06-18T17:07:23.277 回答