Вот ситуация: у меня есть пользовательский элемент управления TextBox, который содержит несколько других элементов управления TextBox. Мне нужно отключить IsTabStop в родительском элементе управления, но я все еще хочу предоставить новое свойство IsTabStop, к которому вложенные текстовые поля привязаны к шаблону. Я написал следующий код:
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 базового класса?
Что происходит?