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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…