您好我正在尝试编写一个数据触发器,我必须清除复选框上的文本框内容。我的代码如下:
只要您不在文本框中键入任何内容,它就会起作用。只要我输入文本框,数据触发器就无法工作。我该如何解决这个问题
<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>
答案 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>