2009-04-10 10 views
12

Stavo provando proprietà associate e trigger di stile sperando di saperne di più. Ho scritto un semplice finestre WPF app con una proprietà associata:Aggiornamento della proprietà associata personalizzata nel trigger di stile con 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); 
    } 

e stavo cercando di aggiornare il 'qualcosa' proprietà associata con un trigger proprietà definita nella sezione di stile del tasto:

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

Tuttavia, ho continuato a ottenere il seguente errore di compilazione:

errore MC4003: Impossibile risolvere la proprietà di stile 'Qualcosa'. Verificare che il tipo proprietario sia il TargetType dello stile o utilizzare la sintassi Class.Property per specificare la proprietà. Riga 10 Posizione 29.

Non riesco a capire perché mi dà questo errore perché ho usato la sintassi 'Class.Property' nel tag della sezione. Qualcuno può dirmi come posso risolvere questo errore di compilazione?

risposta

17

I suoi metodi backing per la proprietà di dipendenza sono chiamati in modo non corretto e deve essere statico:

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

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

Inoltre, non si deve specificare l'assembly nella NS mapping XML locale in XAML, perché lo spazio dei nomi è in assemblea corrente. Invece:

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

Avevo già una lass completamente statica per la mia AttachedProperty, anche con il Get e Set corretto. Sebbene abbia avuto esattamente la stessa eccezione dell'OP, può anche essere risolto rimuovendo le specifiche dell'assembly nello spazio dei nomi (che nel mio caso è stato aggiunto automaticamente da ReSharper). +1 – LuckyLikey

Problemi correlati