这里的情况:我有一个自定义的TextBox控件,其中包含多个其他TextBox控件。我需要在父控件中关闭IsTabStop,但我仍然想要公开一个新的IsTabStop属性,该子属性框是模板绑定的。我写了下面的代码:Silverlight DependencyProperty问题
using System.Windows.Controls;
public class CustomTextBox : Control {
public CustomTextBox() {
base.IsTabStop = false;
}
[Description("Gets or sets whether a control is included in tab navigation.")]
[Category("Common Properties")]
public new bool IsTabStop
{
get { return (bool)GetValue(IsTabStopProperty); }
set { SetValue(IsTabStopProperty, value); }
}
public new static readonly DependencyProperty IsTabStopProperty = DependencyProperty.Register(
"IsTabStop",
typeof(bool),
typeof(CustomTextBox),
new PropertyMetadata(true));
}
但这样会导致奇怪的行为。如果没有为自定义控件的实例指定IsTabStop,则它的行为就像IsTabStop为false,即使默认为true。但是,如果IsTabStop显式标记为true,则将基类的IsTabStop设置为true。另外,如果我将“IsTabStop”和所有相关文本(包括绑定)重命名为“IsTabStopx”,从而不隐藏基本成员,它将按需要工作。隐藏的成员不应该像全新的定义一样行事吗?有什么地方可以阅读基类的IsTabStop?
发生了什么事?
有没有办法解决这个问题?我认为通过定义一个“新”静态依赖项属性并注册它,它将像其他面向对象的工具一样行为并隐藏父类的成员。这在另一个例子中适用于我,当时我改变了一个新的依赖属性的类型,但保留了它的名字。 – Dov 2009-12-24 13:22:03