文本框上的Datatrigger无法正常工作

时间:2010-03-10 06:22:22

标签: wpf textbox checkbox datatrigger

您好我正在尝试编写一个数据触发器,我必须清除复选框上的文本框内容。我的代码如下:

只要您不在文本框中键入任何内容,它就会起作用。只要我输入文本框,数据触发器就无法工作。我该如何解决这个问题

<Window x:Class="CheckboxTextbox.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <Style x:Key="cbStyle" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Chk,Path=IsChecked}" Value="True">
                    <Setter Property="Text" Value="{x:Null}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <StackPanel>
        <CheckBox Name="Chk" Content="test"/>
        <TextBox Style="{StaticResource cbStyle}">

        </TextBox>
    </StackPanel>
</Window>

1 个答案:

答案 0 :(得分:3)

与动画结束后可以“保持”指定值的依赖项属性的动画不同,DataTrigger设置目标属性,然后完成,直到源属性发生变化。

换句话说,在您的示例中,如果您在文本框中放置了一些文本,则选中该框,文本将被清除。但是,如果再次开始在文本框中输入,DataTrigger将不再执行任何操作,直到复选框再次更改为止。这就是为什么当您取消选中并重新选中该框时,文本会再次被清除。

所以你可能想要做的是在你的DataTrigger中,将文本框的IsReadOnly属性设置为true。这将阻止您在DataTrigger处于活动状态时键入框。

<DataTrigger Binding="{Binding ElementName=Chk,Path=IsChecked}" Value="True">
    <Setter Property="Text" Value="{x:Null}"/>
    <Setter Property="IsReadOnly" Value="True"/>
</DataTrigger>