我遇到了这种奇怪的行为,我有一个带有CommandPosition DependencyProperty的UserControl,它接受一个名为" Position"的枚举。在类*中声明为:
public enum Position
{
Left,
Right,
Both
}
*在这种情况下,无论是在内部还是外部,我都试过了。
控件根据定义的位置移动一些按钮。 这是财产声明,对我来说似乎很好:
public static readonly DependencyProperty CommandPositionProperty = DependencyProperty.RegisterAttached("CommandPosition", typeof(Position), typeof(PoisonControl), new PropertyMetadata(Position.Right, OnPositionChanged));
private static void OnPositionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue is Position)
((PoisonControl)d).CommandPosition = (Position)e.NewValue;
}
在视图中,我正确定义了我的控件并可以设置CommandPosition =" Left" (并获得Intellisense)没有任何问题,调用OnPositionChanged方法并按预期将位置传递给e.NewValue。
现在我需要根据ViewState大小更改位置,在ViewState.Setters中我有这一行:
<Setter Target="Poison.CommandPosition" Value="Both" />
它有点工作,调用OnPositionChanged方法,但e.NewValue的类型是System.Int32(在本例中为2),而e.OldValue仍然是Position(在本例中为0)。
为什么呢?难道我做错了什么? 我可以通过将基础类型转换为Position来使其工作,但我不想理解这种奇怪的行为。