我有一个名为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事件处理程序以支持多个值?
谢谢!
答案 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 方法。您可以为按字母顺序枚举指定多个值 用逗号分隔每个值。但是,你无法结合 不是按字母顺序排列的枚举值。例如,你不能使用 用于尝试创建作用于多个的触发器的逗号语法 非标准枚举的条件。