Как добавить пользовательские атрибуты Silverlight XAML? - PullRequest
1 голос
/ 02 февраля 2010

Можно ли ввести «пользовательские» атрибуты в различные элементы пользовательского интерфейса в XAML? Также, чтобы прочитать их позже, как мы добавляем атрибуты для серверных элементов управления в ASP.NET?

Я намереваюсь читать определенные атрибуты и работать с ними вместе.

Ответы [ 3 ]

3 голосов
/ 02 февраля 2010

Похоже, вы пытаетесь найти Прикрепленные свойства .

Присоединенное свойство позволяет добавить свойство, определяемое в Xaml, которое можно «прикрепить» к любому элементу UIelement. Затем вы извлекаете их в коде , как и любое другое свойство зависимости.

3 голосов
/ 02 февраля 2010

Вот подход, который я склоняюсь к этому.

Создайте новый файл класса с именем 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 голосов
/ 02 февраля 2010

Я достиг этого путем создания нового класса, который наследует базовый элемент управления.

Например, у меня есть класс с именем WebTextBox, который наследует TextBox. А внутри WebTextBox есть несколько пользовательских свойств и событий. Делая это, вы наследуете все поведения элемента управления TextBox. Но вы можете проявить творческий подход, если захотите, даже изменив поведение, переопределив события и все такое.

В любом случае, после создания класса вам нужно будет добавить пространство имен для проекта в XAML. Как то так:

xmlns:me="clr-namespace:YourNamespace;assembly=YourAssembly"

И затем вы можете добавить WebTextBox (или как вы его называете) следующим образом:

<me:WebTextBox CustomAttribute="cool stuff" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...