Adding custom attributes to an element in XAML?

23,603

The closest you can get are attached properties. Basically, another class defines a known property (i.e. 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.

Share:
23,603

Related videos on Youtube

ohmusama
Author by

ohmusama

I work for Microsoft coding all the c# I was also involved with the minecraft modding community. I have created a simple Biome Object Builder to hook into Phoenix Terrain Mod in c#. You can check it out http://faskerstudio.com/minecraft/BBOB

Updated on July 09, 2022

Comments

  • ohmusama
    ohmusama almost 2 years

    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;
    
  • ohmusama
    ohmusama about 13 years
    That is much, text. I assume you already understand it. Do you have time to make a short code snippet that applies to my little example? Thanks!
  • CodeNaked
    CodeNaked about 13 years
    @ohmusama - Updated my answer with an example.