2013-04-03 20 views
1

这是我的文本框与转换器:使用触发器设置或更改转换器?

<TextBox Text="{Binding TimbraturaSelezionata.OrarioMinuti, Converter={StaticResource Minuti2HHmmConverter}}" Margin="5,0"/> 

我寻找一种方法来设置或更改时,才有效地需要它的转换器。 实际上,我想将TextBox放入通用用户控件中,并只在满足特定条件时才应用转换器。 我想到的唯一解决方案是使用ContentControl并使用两个DataTrigger来设置其模板,其中一个带有TextBox中的Converter,另一个没有。我希望找到一个更明确的方式来实现我的目标。

感谢您的任何建议。

+1

你为什么不把参数传递给转换器? – Phil

+0

这是一种可能性,但我更喜欢触发器,如果​​我找到如何写它。 – Filippo

回答

0

由于您设置了触发器。这是一个例子。希望能帮助到你;

<TextBox x:Name="MyTextBox" Text="{Binding TimbraturaSelezionata.OrarioMinuti}" Margin="5,0"> 
    <i:Interaction.Triggers> 
     <ei:DataTrigger Value="False" 
         Binding="{Binding YourCondition, ElementName=MyTextBox}"> 
      <ei:ChangePropertyAction PropertyName="Text" 
            Value="{Binding TimbraturaSelezionata.OrarioMinuti}" /> 
     </ei:DataTrigger> 
     <ei:DataTrigger Value="True" 
         Binding="{Binding YourCondition, ElementName=MyTextBox}"> 
      <ei:ChangePropertyAction PropertyName="Text" 
            Value="{Binding TimbraturaSelezionata.OrarioMinuti, Converter={StaticResource Minuti2HHmmConverter}}" /> 
     </ei:DataTrigger> 
    </i:Interaction.Triggers> 
</TextBox> 
0

另一种可行的解决方案是如下因素:

<TextBox Width="100"> 
      <TextBox.Style> 
       <Style TargetType="{x:Type TextBox}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ValoreInMinuti}" Value="True"> 
          <Setter Property="Background" Value="Red" /> 
          <Setter Property="Text" Value="{Binding Quantita, Converter={StaticResource Minuti2HHmmConverter}}" />  
         </DataTrigger> 
         <DataTrigger Binding="{Binding ValoreInMinuti}" Value="False"> 
          <Setter Property="Background" Value="Yellow" /> 
          <Setter Property="Text" Value="{Binding Quantita}" /> 

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

注意Text属性是通过DataTrigger只设置。在我的具体情况下,我只有两种可能性,一种是转换器,另一种没有。

+0

嗯,对不起,显然是思考SL不是WPF与我的例子,虽然相同的概念。干杯! :) –