XAML-逗号分隔的依赖项属性

本文关键字:依赖 属性 分隔 XAML- | 更新日期: 2023-09-27 18:20:37

我有一个名为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" ... />

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

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

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

谢谢!

XAML-逗号分隔的依赖项属性

您试图实现的机制称为"附加属性"。

阅读此信息。

这里有一个简短的代码摘录,它做到了一切:

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中逗号分隔枚举的更多信息。

此外,您可能需要签出此项。

为了允许这种语法,您应该确保有一个标记式枚举。这可以通过将FlagsAttribute添加到枚举中来实现。

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

对于标志式枚举,行为基于Enum.Parse方法您可以通过以下方式为标志式枚举指定多个值用逗号分隔每个值。但是,不能组合非标记的枚举值。例如,您不能使用尝试创建对多个触发器执行操作的触发器的逗号语法非滞后枚举的条件。