如何添加自定义Silverlight XAML属性?

时间:2010-02-01 23:32:14

标签: silverlight xaml

是否可以在XAML中的不同UI元素中引入“自定义”属性?还要稍后阅读它们,就像我们在ASP.NET中添加服务器控件的属性一样?

我打算阅读特定属性并一起操作。

3 个答案:

答案 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" />