XAML - свойство зависимостей с разделителями-запятыми - PullRequest
4 голосов
/ 17 января 2012

У меня есть собственный класс под названием AppPreferences. Этот класс имеет свойство зависимостей под названием Color. Это свойство зависимости представляет перечисляемое значение типа Colors (который является пользовательским перечислителем). Мой код для AppPreferences показан здесь:

public class AppPreferences
{
  public static readonly DependencyProperty ColorProperty = DependencyProperty.RegisterAttached(
  "Color",
  typeof(MyServiceProxy.Colors),
  typeof(AppPreferences),
  new PropertyMetadata(MyServiceProxy.Colors.DEFAULT, new   PropertyChangedCallback(OnColorChanged))
  );

  private static void OnColorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  {
    // Do Stuff
  }
}

Как разработчик, я добавляю это к своим элементам пользовательского интерфейса, чтобы помочь определить цвет. Например, я сделаю что-то вроде этого:

<TextBox custom:AppPreferences.Color="Black" ... />

Теперь у меня есть необходимость поддерживать запасные цвета. Другими словами, я хочу быть в состоянии предоставить разделенный запятыми список значений цветов, подобный следующему:

<TextBox custom:AppPreferences.Color="Black,Blue" ... />

У меня вопрос: как мне обновить свойство зависимости и обработчик события OnColorChanged для поддержки нескольких значений?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 января 2012

Вы должны убедиться, что у вас есть флаговое перечисление , чтобы разрешить этот синтаксис. Это возможно, добавив FlagsAttribute к вашему перечислению.

[Flags]
enum Colors
{
    Black,
    ...
}

Для флаговых перечислений поведение основано на Enum.Parse метод. Вы можете указать несколько значений для флагового перечисления отделяя каждое значение запятой. Тем не менее, вы не можете объединить значения перечисления, которые не являются флагманскими . Например, вы не можете использовать синтаксис запятой, чтобы попытаться создать триггер, который действует на несколько условия не флаговой нумерации.

0 голосов
/ 17 января 2012

Механизм, который вы пытаетесь реализовать, называется «Прикрепленные свойства».

Чтение this для информации.

Вот выдержка из краткого кода, которая делает этовсе:

public static readonly DependencyProperty IsBubbleSourceProperty = 
 DependencyProperty.RegisterAttached(
  "IsBubbleSource",
  typeof(Boolean),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(false, 
    FrameworkPropertyMetadataOptions.AffectsRender)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
  element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
  return (Boolean)element.GetValue(IsBubbleSourceProperty);
}

Прочитайте это , чтобы узнать больше о перечислениях через запятую в Xaml.

Также вы можете захотеть оформить заказ this .

...