2010-10-10 61 views
2

在Expression Blend 4(Silverlight项目)中我有一个UserControl,我已添加了一个CLR属性。该属性是在UC内定义的枚举类型。我已将ChangePropertyAction行为附加到UC的一个实例。然而,XAML分析器提供了以下错误(等等):引用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 
    } 
} 

一个简单workround是 “促进” 吨他从类内部枚举(例如SomeControl_MyEnum),但有没有更清晰的解决方案?

回答

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类。

1

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

样品是:

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

如果你想在结合入公式带来,阅读this

+0

感谢您的回复。然而事实证明,x:Static只是WPF,我没有提到我的项目是Silverlight。对不起,我很愚蠢。 – SoundCrowd 2010-10-10 21:49:17

+0

经过一些试验和错误后,我发现我可以简单地替换ChildPropertyAction.Value元素,并将所需的枚举值作为父元素的Value属性插入。当然,每当我改变Blend中的ChangePropertyAction行为时,我都必须重新编辑并再次编辑。 – SoundCrowd 2010-10-10 21:53:15

+0

啊,我看到我**在标签中提到了Silverlight,但不是主体。已更新帖子以澄清。 – SoundCrowd 2010-10-10 21:57:45