任何人都请尝试这种情况并分享想法来解决面临的问题。
情景:
在我的类(继承自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
答案 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来处理)