Добавление настраиваемых атрибутов к элементу в XAML?

В html ничто не мешает вам создавать настраиваемые атрибуты, поскольку это фактически xml, например

<span myProperty="myValue"></span>

Затем вы можете прочитать это свойство через javascript.

Можно ли сделать то же самое в wpf? Например:

<Canvas MyProperty="MyValue" Name="MyCanvas" DataContext="{Binding}" Background="Black" Margin="181,0,0,0"></Canvas>

и если да, то как бы вы получили доступ к этому свойству? Например:

MyCanvas.MyProperty;

person ohmusama    schedule 25.04.2011    source источник


Ответы (1)


Самое близкое, что вы можете получить, это вложенные свойства. По сути, другой класс определяет известное свойство (например, MyProperty), которое можно установить для других элементов.

Примером может служить свойство Canvas.Left, которое используется Canvas для позиционирования дочернего элемента. Но любой класс может определить присоединенное свойство.

Прикрепленные свойства — это ключ к прикрепленному поведению, что является отличной функцией WPF/ Сильверлайт.

РЕДАКТИРОВАТЬ:

Вот пример класса:

namespace MyNamespace {
    public static class MyClass {

        public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.RegisterAttached("MyProperty",
            typeof(string), typeof(MyClass), new FrameworkPropertyMetadata(null));

        public static string GetMyProperty(UIElement element) {
            if (element == null)
                throw new ArgumentNullException("element");
            return (string)element.GetValue(MyPropertyProperty);
        }
        public static void SetMyProperty(UIElement element, string value) {
            if (element == null)
                throw new ArgumentNullException("element");
            element.SetValue(MyPropertyProperty, value);
        }
    }
}

Затем в XAML вы можете использовать его так:

xmlns:local="clr-namespace:MyNamespace"

<Canvas local:MyClass.MyProperty="MyValue" ... />

Вы можете получить свойство из кода, используя MyClass.GetMyProperty и передав элемент, для которого установлено свойство.

person CodeNaked    schedule 25.04.2011
comment
Это много, текст. Я полагаю, вы уже это понимаете. У вас есть время, чтобы сделать короткий фрагмент кода, применимый к моему маленькому примеру? Спасибо! - person ohmusama; 26.04.2011
comment
@ohmusama - обновил мой ответ примером. - person CodeNaked; 26.04.2011