2009-04-10 7 views
12

J'essayais des propriétés jointes et des déclencheurs de style en espérant en savoir plus à ce sujet. J'ai écrit une fenêtre WPF très simple application avec une propriété attachée:Mise à jour de la propriété attachée personnalisée dans le style Trigger avec Setter

public static readonly DependencyProperty SomethingProperty = 
     DependencyProperty.RegisterAttached(
      "Something", 
      typeof(int), 
      typeof(Window1), 
      new UIPropertyMetadata(0)); 

    public int GetSomethingProperty(DependencyObject d) 
    { 
     return (int)d.GetValue(SomethingProperty); 
    } 
    public void SetSomethingProperty(DependencyObject d, int value) 
    { 
     d.SetValue(SomethingProperty, value); 
    } 

Et je tente de mettre à jour le « quelque chose » bien attaché avec un déclencheur de propriété définie dans la section de style de bouton:

<Window x:Class="TestStyleTrigger.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:TestStyleTrigger;assembly=TestStyleTrigger" 
     Title="Window1" Height="210" Width="190"> 
     <Window.Resources> 
      <Style x:Key="buttonStyle" TargetType="{x:Type Button}"> 
       <Style.Triggers> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="local:Window1.Something" Value="1" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Window.Resources> 

     <Button Style="{StaticResource buttonStyle}"></Button> 
    </Window> 

Cependant, j'ai continué à obtenir l'erreur de compilation suivante:

erreur MC4003: Impossible de résoudre la propriété de style 'Something'. Vérifiez que le type propriétaire est TargetType du style ou utilisez la syntaxe Class.Property pour spécifier la propriété. Ligne 10 Position 29.

Je ne comprends pas pourquoi cela me cause cette erreur parce que j'ai utilisé la syntaxe 'Class.Property' dans l'étiquette de la section. Quelqu'un peut-il me dire comment puis-je corriger cette erreur de compilation?

Répondre

17

Vos méthodes d'accompagnement pour la propriété de dépendance sont nommés de manière incorrecte et doivent être statiques:

public static int GetSomething(DependencyObject d) 
{ 
    return (int)d.GetValue(SomethingProperty); 
} 

public static void SetSomething(DependencyObject d, int value) 
{ 
    d.SetValue(SomethingProperty, value); 
} 

En outre, vous ne devez pas spécifier l'ensemble dans le XML local cartographie NS dans le XAML, car l'espace de noms est dans la l'assemblage actuel. Pour ce faire, à la place:

xmlns:local="clr-namespace:TestStyleTrigger" 
+0

J'avais déjà une fille entièrement statique pour mon AttachedProperty, aussi avec le bon Get and Set. Bien que j'avais exactement la même exception que l'OP, il peut également être résolu, en supprimant la spécification d'assemblage dans l'espace de noms (qui dans mon cas a été ajouté automatiquement par ReSharper). +1 – LuckyLikey