2009-04-10 11 views
12

Ich habe versucht, angefügten Eigenschaften und Stil-Trigger in der Hoffnung, mehr darüber zu erfahren. Ich schrieb eine sehr einfache WPF Windows-Anwendung mit einer daran befestigten Eigenschaft:Aktualisieren von benutzerdefinierten angehängten Eigenschaft in Style-Trigger mit 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); 
    } 

Und ich versuche, das ‚etwas‘ angefügten Eigenschaft mit einer Eigenschaft Trigger in der Schaltfläche Stil Abschnitt definiert zu aktualisieren:

<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> 

Ich habe jedoch folgenden Kompilierungsfehler erhalten:

Fehler MC4003: Die Style-Eigenschaft 'Something' kann nicht aufgelöst werden. Stellen Sie sicher, dass der besitzende Typ der TargetType des Styles ist, oder verwenden Sie die Class.Property-Syntax, um die Eigenschaft anzugeben. Zeile 10 Position 29.

Ich kann nicht verstehen, warum es mir diesen Fehler gibt, weil ich die 'Class.Property' Syntax im Tag des Abschnitts verwendet habe. Kann mir jemand sagen, wie ich diesen Kompilierungsfehler beheben kann?

Antwort

17

Ihre Unterstützung Methoden für die Abhängigkeitseigenschaft sind falsch benannt und muss statisch sein:

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

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

Außerdem sollten Sie die Assembly im lokalen XML-NS-Zuordnung in der XAML nicht angeben, da der Namespace in der ist aktuelle Montage. Tun Sie dies stattdessen:

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

Ich hatte bereits ein völlig statisches Mädchen für meine AttachedProperty, auch mit dem richtigen Get und Set. Obwohl ich genau die gleiche Ausnahme wie das OP hatte, kann es auch gelöst werden, indem die Assembly-Spezifikation im Namespace entfernt wird (was in meinem Fall automatisch von ReSharper hinzugefügt wurde). +1 – LuckyLikey

Verwandte Themen