Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ohmusamaОтветов: 1

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

propertieswpfxaml

Ответы

Ответ 1 · рейтинг 26 · CodeNaked

Самое близкое, что вы можете получить, это вложенные свойства. По сути, другой класс определяет известное свойство (например, 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 и передав элемент, для которого установлено свойство.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы