2009-04-10 2 views
12

Я пытался использовать прилагаемые свойства и триггеры стиля, надеясь узнать больше об этом. Я написал очень простой WPF окно приложения с вложенным свойством:Обновление пользовательской привязанной недвижимости в стиле триггера со сетатором

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

И я пытался обновить «нечто» вложенное свойство с триггером имущества, определенный в разделе Кнопки стиля:

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

Тем не менее, я продолжал получать следующую ошибку компиляции:

ошибка MC4003: Невозможно разрешить свойство стиля «Что-то». Убедитесь, что тип владельца - это TargetType стиля, или используйте синтаксис Class.Property для указания свойства. Строка 10 Позиция 29.

Я не могу понять, почему она дает мне эту ошибку, потому что я использовал синтаксис «Class.Property» в теге раздела. Может ли кто-нибудь сказать мне, как я могу исправить эту ошибку компиляции?

ответ

17

Ваших методов отступающих для свойства зависимостей названы неправильно и должны быть статическими:

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

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

Кроме того, вы не должны указывать сборку в локальном XML отображения NS в XAML, поскольку пространство имен в токовая сборка. Сделайте это вместо этого:

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

У меня уже была полностью статическая ласка для моего AttachedProperty, а также с правильным Get и Set. Хотя я имел точно такое же исключение, как и OP, его также можно решить, удалив спецификацию сборки в пространстве имен (который в моем случае был автоматически добавлен ReSharper). +1 – LuckyLikey

Смежные вопросы