2010-03-10 54 views
1

嗨,我想写一个datatrigger中,我必须清除复选框checked.My代码的文本框内容如下Datatrigger在文本框中不能正常工作

它的工作原理,只要你不在文本框中键入任何给定。由于当我在datatrigger未能work.How我可以解决这个

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

回答

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>