這裏的情況:我有一個自定義的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