2009-11-30 8 views
3

J'ai eu des problèmes pour utiliser un convertisseur de valeur avec un déclencheur de données. Dans certains de mes codes, il semble que le DataTriggerPath est appliqué à l'élément racine, plutôt qu'à l'élément auquel le style s'applique. J'ai créé un test élémentaire simple, et je ne comprends pas son comportement. Je m'attends à ce que le Button devienne rouge ou bleu en fonction de la valeur qui est fournie au convertisseur DataTrigger, mais le Button n'est pas affecté du tout!Simple WPF IValueConverter et DataTrigger ne fonctionnent pas ensemble

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:SimpleWpfApplication" 
    x:Class="SimpleWpfApplication.SimpleUserControl" 
    ToolTip="UserControl ToolTip"> 
    <UserControl.Resources> 
     <local:SimpleConverter x:Key="SimpleConverter" /> 
    </UserControl.Resources> 
    <Button ToolTip="Button ToolTip"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Style.Triggers> 
        <DataTrigger 
         Binding="{Binding Path=ToolTip, Converter={StaticResource SimpleConverter}}" 
         Value="Button ToolTip"> 
         <Setter Property="Background" Value="Red" /> 
        </DataTrigger> 
        <DataTrigger 
         Binding="{Binding Path=ToolTip, Converter={StaticResource SimpleConverter}}" 
         Value="UserControl ToolTip"> 
         <Setter Property="Background" Value="Blue" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
</UserControl> 

Et un convertisseur simple:

class SimpleConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new InvalidOperationException("SimpleConverter is a OneWay converter."); 
    } 
} 

Pourquoi ne pas Convert être appelé? Pourquoi le Button ne devient-il pas rouge ou bleu?

Répondre

8

a trouvé la réponse à une autre question StackOverflow: What’s wrong with my datatrigger binding?

La réponse est d'ajouter RelativeSource={RelativeSource Self} à la liaison:

<DataTrigger Binding="{Binding Path=ToolTip, 
         RelativeSource={RelativeSource Self}, 
         Converter={StaticResource SimpleConverter}}" /> 
Questions connexes