Вот подход, который я склоняюсь к этому.
Создайте новый файл класса с именем Meta: -
namespace SilverlightApplication1
{
public static class Meta
{
#region SomeValue
public static string GetSomeValue(DependencyObject obj)
{
return (string)obj.GetValue(SomeValueProperty);
}
public static void SetSomeValue(DependencyObject obj, string value)
{
obj.SetValue(SomeValueProperty, value);
}
public static readonly DependencyProperty SomeValueProperty =
DependencyProperty.RegisterAttached("SomeValue", typeof(string), typeof(Meta),
new PropertyMetadata(null));
#end region
#region SomeOtherValue
// Boilerplate code from above.
#end region
}
}
Теперь значение может быть присоединено в XAML следующим образом: -
<TextBox x:Name="txt" local:Meta.SomeValue="Hello, World!" />
В некоторый момент в коде это значение можно получить с помощью: -
string value = Meta.GetSomeValue(txt);
Обратите внимание, что вам не нужно указывать String
в качестве типа свойства, которое выможет в значительной степени использовать любой тип, который вам нравится, с тем ограничением, что если вы можете присоединить его в XAML, тип должен быть совместим с тем, как XAML создает объекты (например, требуется конструктор по умолчанию).