如何单击TextBox(或Label)以切换复选框

时间:2015-10-27 10:42:13

标签: wpf xaml mvvm

我有一个包含以下XAML的WPF应用程序

<CheckBox IsChecked="{Binding IsTime}" />
<TextBlock Text="Time" />

我想要的是,如果用户点击文本框,它将切换CheckBox。以同样的方式,我们可以在MVC.NET中使用labelcheckbox(以及HTML)

我可以使用代码中的事件执行此操作,但我使用的是MVVM,因此,不想使用这些事件。

我的问题和Change a Label's behavior to support toggling by click in WPF之间的区别在于我已经将我的CheckBox绑定到某个东西......

我希望这项努力可以让我更清楚地了解我要做的事情

<CheckBox IsChecked="{Binding IsTime}" x:Name="Checky" />
<TextBlock Text="Time">
    <TextBlock.Style>
        <Style>
            <Style.Triggers>
                <Trigger Property="TextBlock.MouseDown" Value="True">
                    <Setter TargetName="Checky" Property="IsChecked" Value=Not IsTime> //WHAT TO DO HERE
                    </Setter>
                </Trigger>
             </Style.Triggers>
         </Style>
   </TextBlock.Style>
</TextBlock>

2 个答案:

答案 0 :(得分:1)

您可以将TextBox和其他控件放在CheckBox中。这样单击TextBox也会切换CheckBox。以下是CheckBox中包含多个项目的示例,但您当然可以只在其中包含TextBox。

<CheckBox Padding="2" IsChecked="{Binding IsTime}">
    <StackPanel Orientation="Horizontal">
        <Image Width="24" Height="24" Source="someimage"/>
        <TextBlock Text="Time"/>
    </StackPanel>
</CheckBox>

答案 1 :(得分:0)

使用您提供的链接中的代码并将IsChecked绑定到同一属性:

<StackPanel>
    <CheckBox x:Name="checkbox" IsChecked="{Binding IsTime}"/>

    <CheckBox IsChecked="{Binding IsTime}" Content="Hello">
        <CheckBox.Template>
            <ControlTemplate TargetType="CheckBox">
                <ContentPresenter/>
            </ControlTemplate>
        </CheckBox.Template>
    </CheckBox>
</StackPanel>

您知道在CheckBox上有一个Content属性,可以模板化以实现所需的效果,而无需使用多个CheckBox。