在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),但是有更清晰的解决方案吗?
答案 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类。