DataTrigger setter不会启动

时间:2013-06-06 09:18:58

标签: wpf datatrigger

我有两个radioButtons和两个文本框

<RadioButton x:Name="AdmLnkRadio1" GroupName="AdmLnkgr1" Content="Link #1"/>
<RadioButton x:Name="AdmLnkRadio2" GroupName="AdmLnkgr1" Content="Link #2"/>

<TextBox x:Name="AdmLnkTextBoxName1" />                                     
<TextBox x:Name="AdmLnkTextBoxName2" IsEnabled="False" >
  <TextBox.Style>
    <Style BasedOn="{StaticResource TextBoxBase}" TargetType="TextBox" >
        <Style.Triggers>  

            <!--Trigger 1  -->                                                        
            <DataTrigger Binding="{Binding ElementName=AdmLnkRadio1, Path=IsChecked}" Value="True">
                  <Setter Property="Text" Value="{Binding ElementName=AdmLnkTextBoxName1, Path=Text}"></Setter>
                  <Setter Property="IsEnabled" Value="False"></Setter>
            </DataTrigger>

             <!--Trigger 2 - Doesn't Fires UP!!!! -->  
            <DataTrigger Binding="{Binding ElementName=AdmLnkRadio2, Path=IsChecked}" Value="True">
                  <Setter Property="Text" Value=""></Setter>
                  <Setter Property="IsEnabled" Value="True"></Setter>
            </DataTrigger>

        </Style.Triggers>                                                            
     </Style>
   </TextBox.Style>
</TextBox>

当用户检查radiobutton 1时,触发器1工作,第二个文本框文本绑定到第一个文本。但是当检查第二个radiobutton时,第二个触发器应该启动,但事实并非如此。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

它确实触发但是因为您将IsEnabled设置为固定False值,您的样式不会覆盖它(Dependency Property Setting Precedence List)。尝试在IsEnabled中设置Style,就像这样

<TextBox x:Name="AdmLnkTextBoxName1" />
<TextBox x:Name="AdmLnkTextBoxName2">
   <TextBox.Style>
       <Style TargetType="TextBox" >
           <Setter Property="IsEnabled" Value="False"/>
           <Style.Triggers>
               <DataTrigger Binding="{Binding ElementName=AdmLnkRadio1, Path=IsChecked}" Value="True">
                   <Setter Property="Text" Value="{Binding ElementName=AdmLnkTextBoxName1, Path=Text}"/>
                   <Setter Property="IsEnabled" Value="False"/>
               </DataTrigger>

               <DataTrigger Binding="{Binding ElementName=AdmLnkRadio2, Path=IsChecked}" Value="True">
                   <Setter Property="Text" Value=""/>
                   <Setter Property="IsEnabled" Value="True"/>
               </DataTrigger>

           </Style.Triggers>
       </Style>
   </TextBox.Style>
</TextBox>