2009-04-10 15 views
12

Próbowałem załączonych właściwości i wyzwalaczy stylu, mając nadzieję dowiedzieć się więcej na ten temat. Napisałem bardzo prosty okien WPF aplikacji z dołączonym nieruchomości:Aktualizowanie niestandardowej właściwości dołączonej w stylu Wyzwalanie z ustawiaczem

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); 
    } 

I starałem się zaktualizować „coś” załączony nieruchomość wyzwalacz nieruchomości określonej w sekcji Przycisk styl:

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

Jednak nadal otrzymuję następujący błąd kompilacji:

błąd MC4003: Nie można rozwiązać właściwości stylu "Coś". Sprawdź, czy typem posiadania jest typ TargetType stylu, lub użyj składni Class.Property, aby określić właściwość. Linia 10 Pozycja 29.

Nie mogę zrozumieć, dlaczego daje mi ten błąd, ponieważ użyłem składni "Class.Property" w tagu sekcji. Czy ktoś może mi powiedzieć, jak mogę naprawić ten błąd kompilacji?

Odpowiedz

17

Twoje metody mocująca dla właściwości zależności nazywane są nieprawidłowo i musi być statyczna:

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

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

Ponadto, nie należy określać zespół w lokalnym XML NS mapowania w XAML, ponieważ jest w przestrzeni nazw obecny montaż. Zrób to zamiast tego:

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

Miałem już w pełni statyczną dziewczynę dla mojego AttachedProperty, również z prawidłowym Get i Set. Chociaż miałem dokładnie taki sam wyjątek jak OP, można go również rozwiązać, usuwając specyfikację zestawu w przestrzeni nazw (która w moim przypadku została dodana automatycznie przez ReSharper). +1 – LuckyLikey

Powiązane problemy