2012-05-18 4 views
4

У меня возникла проблема с прикрепленным свойством только для чтения. я определил это следующим образом:Только для чтения в триггерах (WPF)

public class AttachedPropertyHelper : DependencyObject 
{ 

    public static readonly DependencyPropertyKey SomethingPropertyKey = DependencyProperty.RegisterAttachedReadOnly("Something", typeof(int), typeof(AttachedPropertyHelper), new PropertyMetadata(0)); 

    public static readonly DependencyProperty SomethingProperty = SomethingPropertyKey.DependencyProperty; 

} 

И я хочу использовать его в XAML:

<Trigger Property="m:AttachedPropertyHelper.Something" Value="0"> 
         <Setter Property="FontSize" Value="20"/> 
        </Trigger> 

Но компилятор не хочет работать с ним. В результате, у меня есть 2 ошибки:

Не можете найти стиль собственности «нечто» от типа «ReadonlyAttachedProperty.AttachedPropertyHelper». Строка 11 Позиция 16.

Свойство «Что-то» не было найдено в типе «TextBlock».

ответ

4

Я не знаю, если есть что-то особенное с только для чтения вложенного свойства, но если вы объявите его по умолчанию в порядке, она работает:

public class AttachedPropertyHelper : DependencyObject 
{ 
    public static int GetSomething(DependencyObject obj) 
    { 
     return (int)obj.GetValue(SomethingProperty); 
    } 

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

    // Using a DependencyProperty as the backing store for Something. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty SomethingProperty = 
     DependencyProperty.RegisterAttached("Something", typeof(int), typeof(AttachedPropertyHelper), new UIPropertyMetadata(0)); 
} 

EDIT

Если вы хотите использовать то же самое, что и только что доступное для чтения свойство, вы можете изменить его на:

public class AttachedPropertyHelper : DependencyObject 
{ 
    public static int GetSomething(DependencyObject obj) 
    { 
     return (int)obj.GetValue(SomethingProperty); 
    } 

    internal static void SetSomething(DependencyObject obj, int value) 
    { 
     obj.SetValue(SomethingPropertyKey, value); 
    } 

    private static readonly DependencyPropertyKey SomethingPropertyKey = 
     DependencyProperty.RegisterAttachedReadOnly("Something", typeof(int), typeof(AttachedPropertyHelper), new UIPropertyMetadata(0)); 

    public static readonly DependencyProperty SomethingProperty = SomethingPropertyKey.DependencyProperty; 
} 
+0

Да, я это знаю. Но мне это интересно ... – Developex

+1

В каком направлении? Чего вы хотите достичь? – LPL

+0

Я хочу работать с READ-ONLY. – Developex