Добавление пользовательских атрибутов для элемента в XAML? - PullRequest
21 голосов
/ 26 апреля 2011

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

1 Ответ

26 голосов
/ 26 апреля 2011

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

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

Присоединенные свойства - это ключ к прикрепленному поведению , что является отличной особенностью WPF / Silverlight.

EDIT:

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

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 и передав элемент, для которого установлено свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...