2009-04-10 13 views
12

Daha fazla bilgi edinmeyi ümit eden özellikleri ve stil tetikleyicileri deniyordum. Ben iliştirilmiş bir özellik ile çok basit bir WPF pencere app yazdı:Seter ile Stil Bağlantısında Özel Bağlı Özelliğin Güncellenmesi

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

Ve düğme stili bölümünde tanımlanmış bir özellik tetikleyici ile 'Something' ekli özelliği güncelleştirmek çalışıyordu:

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

Ancak, derleme hatasını takip etmeye devam ettim:

hata MC4003: Stil Özelliği 'Something' çözülemiyor. Sahip türünün Stilin TargetType olduğunu doğrulayın veya Özelliği belirtmek için Class.Property sözdizimini kullanın. Satır 10 Konum 29.

Bölümün etiketinde 'Class.Property' sözdizimini kullandığım için neden bu hatayı neden verdiğini anlayamıyorum. Herhangi biri bana bu derleme hatasını nasıl düzeltebileceğini söyleyebilir mi? bağımlılık özelliği için

cevap

17

Sizin destek yöntemleri yanlış adlandırılır ve statik olmalıdır: ad olduğu için aynı zamanda

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

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

, XAML yerel XML NS eşlemenizde montaj belirtmemelidir mevcut montaj Bunun yerine:

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

Doğru Get ve Ayarla birlikte AttachedProperty'im için zaten tam bir statik lass vardı. Tam olarak OP ile aynı istisnaya sahip olmama rağmen, isim-alanındaki montaj spesifikasyonunun kaldırılmasıyla da çözülebilir (bu, Case'imde ReSharper tarafından otomatik olarak eklenmiştir). +1 – LuckyLikey

İlgili konular