是否可以在XAML中的不同UI元素中引入“自定义”属性?还要稍后阅读它们,就像我们在ASP.NET中添加服务器控件的属性一样?
我打算阅读特定属性并一起操作。
答案 0 :(得分:3)
听起来你正试图找到Attached Properties。
附加属性允许您添加可在Xaml中定义的属性,该属性可以“附加”到任何UIelement。然后,您retrieve them in code就像任何其他依赖属性一样。
答案 1 :(得分:3)
这是我倾向于采取的方法。
创建一个名为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构造对象的方式(例如需要默认构造函数)。
答案 2 :(得分:2)
我完成的方法是创建一个继承基本控件的新类。
例如,我有一个名为WebTextBox的类,它继承了TextBox。而WebTextBox内部则是一些自定义属性和事件。通过这样做,您将继承TextBox控件的所有行为。但是如果您选择,您可以在这里获得创意,甚至通过覆盖事件等来修改行为。
无论如何,在创建类之后,您必须将项目的命名空间添加到XAML。像这样:
xmlns:me="clr-namespace:YourNamespace;assembly=YourAssembly"
然后你可以像这样添加一个WebTextBox(或你称之为的任何东西):
<me:WebTextBox CustomAttribute="cool stuff" />