Enum DependencyProperty作为Int从Setter

时间:2016-03-20 17:08:38

标签: c# xaml win-universal-app

我遇到了这种奇怪的行为,我有一个带有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来使其工作,但我不想理解这种奇怪的行为。

0 个答案:

没有答案