WPF: как сделать & # 8220; pushlike & # 8221; Флажок?
-
06-07-2019 - |
Вопрос
Я хотел бы создать CheckBox, который будет выглядеть как кнопка. Моя первоначальная слабая попытка не работает вообще.
<CheckBox x:Name="test">
Testing!
<CheckBox.Template>
<ControlTemplate>
<Button>
<ContentPresenter/>
</Button>
</ControlTemplate>
</CheckBox.Template>
</CheckBox>
ContentPresenter не работает (кнопка пуста), и при нажатии кнопки свойство IsChecked не переключается. Кроме того, я не знаю, как сделать так, чтобы кнопка выглядела нажатой, когда IsChecked имеет значение true.
Решение
Подойдет ToggleButton твои нужды? CheckBox происходит от него, и поэтому они очень похожи.
Другие советы
Я только начал писать тот же комментарий:)
<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>
Я согласен, что ToggleButton - это то, что нужно, но если вы хотите, чтобы ваш контент отображался в вашем примере, попробуйте изменить объявление ContentPresenter на следующее:
<ContentPresenter Content="{TemplateBinding Content}" />