简体   繁体   中英

Adding custom attributes to an element in XAML?

In html, there is nothing preventing you from creating custom attributes, since it is effectively xml such as

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

Then you can read that property via javascript.

Can you do the same thing in wpf? For example:

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

and If so how would you access that property? For example:

MyCanvas.MyProperty;

The closest you can get are attached properties . Basically, another class defines a known property (ie MyProperty), which can be set on other elements.

An example would be the Canvas.Left property, which is used by the Canvas to position a child element. But any class can define an attached property.

Attached properties are the key behind attached behaviors , which is a great feature of WPF/Silverlight.

EDIT:

Here is an example class:

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

Then in XAML you can use it like so:

xmlns:local="clr-namespace:MyNamespace"

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

You can get the property from code using MyClass.GetMyProperty and passing in the element on which the property is set.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM