WPF XAML自定义控件:单击“复选框”,更新内部文本

时间:2016-11-03 19:42:03

标签: wpf xaml datatrigger

我正在制作一个继承自CheckBox的自定义控件。在里面我有一个TextBox,当我点击“CheckBox”时,我想将TextBox的文本更改为“true”。我尝试过使用DataTriggers,但似乎没什么用。我目前的设置是,

<Style TargetType="{x:Type local:MyCheckBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyCheckBox}"> 
                <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
                      Width="{TemplateBinding Width}"
                      Height="{TemplateBinding Height}">

                    <Border x:Name="CheckBoxTextContainer" CornerRadius="50" Background="Green"
                            VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <TextBlock x:Name="CheckBoxText" Text="False" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                    </Border>

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我如何以及在何处定义触发器,以便当我单击“CheckBox”时,它会更改“CheckBoxText”的文本

1 个答案:

答案 0 :(得分:2)

您可以使用DataTrigger执行此操作(您将与RelativeSource Self绑定以转到IsChecked),但使用常规Trigger更简单:

<ControlTemplate.Triggers>
    <Trigger Property="IsChecked" Value="True">
        <Setter TargetName="CheckBoxText" Property="Text" Value="True" />
    </Trigger>
</ControlTemplate.Triggers>

如果你想开始一个故事板,

<ControlTemplate.Triggers>
    <Trigger Property="IsChecked" Value="True">
        <Setter TargetName="CheckBoxText" Property="Text" Value="True" />
        <Trigger.EnterActions>
            <BeginStoryboard>
                <Storyboard ...stuff... />
            </BeginStoryboard>
        </Trigger.EnterActions>
    </Trigger>
</ControlTemplate.Triggers>