2

J'ai créé une propriété attachée à étendre une classe Button avec l'état supplémentaire:Quel est le problème avec ma liaison de Datatrigger?

<Button v:ExtensionHelper.OperationMode="{Binding MyObject.OperationMode}" 
     Command="{Binding MyObject.Select}" 
     Style="{StaticResource operationModeControlTemplateStyle}" /> 

Je veux accéder à cette valeur dans le ControlTemplate en utilisant DataTrigger comme ceci:

<Style x:Key="operationModeControlTemplateStyle" TargetType="Button"> 
    <Setter Property="IsHitTestVisible" Value="true" />   
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid> 
        <Image x:Name="hand" Source="hand.png" /> 
        <Image x:Name="cross" Source="cross.png" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding Path=(v:ExtensionHelper.OperationMode), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Value="Manual"> 
         <Setter TargetName="cross" Property="Visibility" Value="Collapsed" /> 
         <Setter TargetName="hand" Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=(v:ExtensionHelper.OperationMode), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Value="Disabled"> 
         <Setter TargetName="cross" Property="Visibility" Value="Visible" /> 
         <Setter TargetName="hand" Property="Visibility" Value="Collapsed" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=(v:ExtensionHelper.OperationMode), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Value="Automatic"> 
         <Setter TargetName="cross" Property="Visibility" Value="Collapsed" /> 
         <Setter TargetName="hand" Property="Visibility" Value="Collapsed" /> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Mais j'obtenir ce erreur:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Button', AncestorLevel='1''. BindingExpression:Path=(0); DataItem=null; target element is 'Button' (Name=''); target property is 'NoTarget' (type 'Object')

l'expression de liaison dans le DataTrigger semble être inco Rect. Qu'est-ce que je fais mal?

Répondre

15

La réponse est assez simple:

Binding="{Binding RelativeSource={RelativeSource Self}, Path=(v:ExtensionHelper.OperationMode)}"