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