2017-09-21 3 views
0

Dans WPF, j'ai créé un ControlTemplate pour un bouton et j'ai essayé de modifier le pinceau d'arrière-plan à l'aide d'un déclencheur. Pour stocker la valeur de la brosse, j'utilise une propriété jointe.WPF: Pourquoi ne puis-je pas lire une propriété jointe à l'intérieur d'un déclencheur de modèle de contrôle?

J'ai testé la propriété jointe elle-même et cela fonctionne bien - elle peut être définie, et elle peut être liée à (comme lorsque je lie simplement l'arrière-plan à cette propriété). Mais quand j'essaye d'obtenir cette propriété à l'intérieur du déclencheur (change l'arrière-plan à la valeur de cette propriété), la valeur n'est même pas lue (comme je vois quand je breakpoint dans le getter de propriété attaché), et le les changements de fond à transparent.

Comment puis-je résoudre ce problème?

<ControlTemplate x:Key="DefaultButtonTemplate" TargetType="{x:Type Button}"> 
    <Border 
     x:Name="border" 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness}" 
     Background="{TemplateBinding Background}" 
     SnapsToDevicePixels="True" 
     > 
     <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" TargetName="border" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ButtonAttachedProperties.BackgroundOnMouseOver}"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

Répondre

3

Il vous comprend mal. Il pense que vous référencez une propriété d'une propriété, pas un nom en deux parties d'une propriété. Essayez de désambiguïser avec des parenthèses, comme ceci:

Path=(myns:ButtonAttachedProperties.BackgroundOnMouseOver) 

Ne pas oublier l'espace de noms.

+0

Génial. Je vous remercie! – user884248