从XAML中引用类中定义的枚举

时间:2010-10-10 20:15:31

标签: silverlight xaml expression-blend

在Expression Blend 4(Silverlight项目)中,我有一个UserControl,我已经添加了一个CLR属性。此属性是枚举类型,在UC中定义。我已将ChangePropertyAction行为附加到UC的实例。但是,XAML解析器会出现以下错误(其中包括):

  

'+'在名称

中无效

这是因为已生成以下XAML(代码段):

<local:SomeControl Margin="155,113,317,0" d:LayoutOverrides="Width, Height">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonDown">
      <ei:ChangePropertyAction PropertyName="MyProp">
        <ei:ChangePropertyAction.Value>
          <local:SomeControl+MyEnum>Second</local:SomeControl+MyEnum> <----- Error on this line caused by the '+' 
        </ei:ChangePropertyAction.Value>
      </ei:ChangePropertyAction>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</local:SomeControl>

背后的代码:

public partial class SomeControl : UserControl
{
    public SomeControl()
    {
        // Required to initialize variables
        InitializeComponent();
    }

    public MyEnum MyProp
    {
        get; set;
    }

    public enum MyEnum
    {
        First,
        Second,
        Third
    }
}

一个简单的工作方法是从类中“提升”枚举(例如SomeControl_MyEnum),但是有更清晰的解决方案吗?

2 个答案:

答案 0 :(得分:1)

您需要使用x:Static标记扩展,不要忘记根据需要在XAML中添加命名空间。

样本将是:

"{x:Static Member=MyProject:MyEnum.First}"

如果您想将约束带入等式,请阅读this

答案 1 :(得分:1)

不支持在Xaml中使用嵌套类型名称。您仍然可以指定属性的值而不引用类型名称。以下任何一种都应该有效:

<local:SomeControl Margin="155,113,317,0" d:LayoutOverrides="Width, Height">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonDown">
      <ei:ChangePropertyAction PropertyName="MyProp">
        <ei:ChangePropertyAction.Value>Second</ei:ChangePropertyAction.Value>
      </ei:ChangePropertyAction>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</local:SomeControl>

<local:SomeControl Margin="155,113,317,0" d:LayoutOverrides="Width, Height">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonDown">
      <ei:ChangePropertyAction PropertyName="MyProp" Value="Second" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</local:SomeControl>

如果能够从Xaml引用MyEnum类型对您很重要,则需要将该定义移出SomeControl类。

相关问题