XAML - 逗号分隔的依赖属性

时间:2012-01-17 14:56:14

标签: c# xaml dependency-properties

我有一个名为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
  }
}

作为开发人员,我将此添加到我的UI元素以帮助确定颜色。例如,我会做这样的事情:

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

我现在需要支持后备颜色。换句话说,我希望能够提供逗号分隔的Colors值列表,类似于以下内容:

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

我的问题是,如何更新我的依赖项属性和OnColorChanged事件处理程序以支持多个值?

谢谢!

2 个答案:

答案 0 :(得分:0)

您尝试实现的机制称为“附加属性”。

阅读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);
}

阅读this以获取有关Xaml中逗号分隔枚举的更多信息。

另外,您可能需要结帐this

答案 1 :(得分:0)

您应该ensure that you have a flagwise enumeration才能使用此语法。这可以通过在枚举中添加FlagsAttribute来实现。

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

对于flagwise枚举,行为基于Enum.Parse   方法。您可以为按字母顺序枚举指定多个值   用逗号分隔每个值。但是,你无法结合   不是按字母顺序排列的枚举值。例如,你不能使用   用于尝试创建作用于多个的触发器的逗号语法   非标准枚举的条件。