property正在尝试从System.Windows.FrameworkElement访问该值

时间:2016-03-15 16:23:25

标签: c# wpf xaml

任何人都请尝试这种情况并分享想法来解决面临的问题。

情景:

在我的类(继承自Control)中,我已经声明了属性FlowDirection,它是BulletGraphFlowDirection的类型(Enum(Forward,Backward))。

我使用了新的Flowword关键字来解决我得到的警告。

警告' DirectionSfBulletGraph1.MyClass.FlowDirection'隐藏继承成员' System.Windows.FrameworkElement.FlowDirection'。如果想要隐藏,请使用new关键字。

    public enum BulletGraphFlowDirection
    {
        Forward,
        Backward
    }
public class MyClass : Control
{

    public new BulletGraphFlowDirection FlowDirection
    {
        get { return (BulletGraphFlowDirection)GetValue(FlowDirectionProperty); }
        set { SetValue(FlowDirectionProperty, value); }
    }

    // Using a DependencyProperty as the backing store for FlowDirection.  This enables animation, styling, binding, etc...
    public new static readonly DependencyProperty FlowDirectionProperty =
        DependencyProperty.Register("FlowDirection", typeof(BulletGraphFlowDirection), typeof(MyClass), new PropertyMetadata(BulletGraphFlowDirection.Backward));
}

问题:

当我尝试在Xaml页面中设置属性FlowDirection值时,它只是抛出错误消息“Backward不是FlowDirection的有效值”。

<local:MyClass x:Name="myClass" FlowDirection="Backward"/>

我的猜测是FlowDirection属性试图从System.Windows.FrameworkElement访问该值。的FlowDirection&#39;(枚举(LeftToRight,从右至左))

通过后面的代码设置属性值时,不会出现错误。

myClass.FlowDirection = BulletGraphFlowDirection.Backward;

为什么我从Xaml页面声明时遇到问题很难找到它的根本原因。请与我分享想法来解决。

此致

Jeyasri M

1 个答案:

答案 0 :(得分:-1)

好吧,正如你所说,它试图使用原始FlowDirection的值。

原因是隐藏!=覆盖。因此,如果您的元素存储在Control类型的集合中,并且在其元素上调用FlowDirection,则将调用Control.FlowDirection而不是MyClass.FlowDirection。当它试图解析xaml并初始化视图时,你的控件可能被处理为Control而不是MyClass。

在代码隐藏中设置值时,可以使用MyClass类型变量明确指定要设置MyClass.FlowDirection。

如果要将此变量实例化为:

Control myClass = new MyClass();

然后

myClass.FlowDirection = BulletGraphFlowDirection.Backward;
在我看来,

不起作用。

正如Karmacon建议的那样,更改名称将解决问题。 (我想强制xaml解析器将你的控件作为MyClass而不是Control来处理)