2009-04-10 9 views
12

Estaba probando propiedades adjuntas y desencadenadores de estilo con la esperanza de obtener más información al respecto. me escribió una muy simple aplicación de Windows WPF con una propiedad asociada:Actualización de propiedad adjunta personalizada en el disparador de estilo 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); 
    } 

y yo estaba tratando de actualizar el 'algo' propiedad asociada con un desencadenador de propiedad se define en la sección de estilo de botón:

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

Sin embargo, seguí recibiendo siguiente error de compilación:

error MC4003: No se puede resolver la propiedad de estilo 'Algo'. Verifique que el tipo propietario sea TargetType del estilo o use la sintaxis Class.Property para especificar la propiedad. Línea 10 Posición 29.

No puedo entender por qué me da este error porque utilicé la sintaxis 'Clase.Propiedad' en la etiqueta de la sección. ¿Alguien puede decirme cómo puedo solucionar este error de compilación?

Respuesta

17

Sus métodos de soporte para la propiedad de dependencia se nombran de forma incorrecta y deben ser estáticas:

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

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

Además, no se debe especificar el conjunto en el XML NS mapeo local en el XAML porque el espacio de nombres está en el montaje actual. Haga esto en su lugar:

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

Ya tenía una chica totalmente estática para mi AttachedProperty, también con el Get and Set correcto. Aunque tenía exactamente la misma excepción que el OP, también se puede resolver eliminando la especificación del ensamblado en el espacio de nombres (que en mi caso fue agregado automáticamente por ReSharper). +1 – LuckyLikey

Cuestiones relacionadas