WPF: Как сделать флажок "pushlike"? - PullRequest
9 голосов
/ 18 июня 2009

Я хотел бы сделать CheckBox, который выглядит точно как кнопка. Моя первоначальная слабая попытка не работает вообще.

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

ContentPresenter не работает (кнопка пуста), и при нажатии кнопки свойство IsChecked не переключается. Кроме того, я не знаю, как заставить кнопку выглядеть нажатой, когда IsChecked имеет значение true.

Ответы [ 3 ]

13 голосов
/ 18 июня 2009

Подойдет ли ToggleButton к вашим потребностям? CheckBox происходит от него, и поэтому они очень похожи.

6 голосов
/ 18 июня 2009

Я только начал писать тот же комментарий:)

<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 голосов
/ 18 июня 2009

Я согласен, что ToggleButton - это то, что нужно, но если вы хотите, чтобы ваш контент отображался в вашем примере, попробуйте изменить объявление ContentPresenter на следующее:

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