1

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

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

<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>
4

1 回答 1

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>
于 2010-03-10T06:34:40.850 回答