Привет! Я прочитал некоторые важные вопросы в stackoverflow, но все еще не могу понять, как решить мои вопросы:
Мне нужно создать элемент управления CheckableGroupBox, который совпадает с GroupBox, но в заголовке которого есть флажок. И это имеет следующее требование:
Исходный GroupBox имеет свойство Header типа объекта, мне нужно ограничить это свойство в CheckableGroupBox только строкой.
Пользователи могут изменить текст заголовка (текст флажка), вызвав myCheckableGroupBox.Header = "некоторый текст здесь".
Я написал приведенный ниже код для обслуживания этих предложений:
public class CheckableGroupBox : System.Windows.Controls.GroupBox
{
//override the default header property
private static void OnHeaderChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
CheckableGroupBox me = o as CheckableGroupBox;
me.labHeader.Content = e.NewValue.ToString();
}
public CheckableGroupBox() : base()
{
//setup the header of the group box
//create the stack panel, add the checkbox and the label
System.Windows.Controls.StackPanel sp = new System.Windows.Controls.StackPanel();
sp.Orientation = System.Windows.Controls.Orientation.Horizontal;
this.chkHeader = new System.Windows.Controls.CheckBox();
sp.Children.Add(this.chkHeader);
sp.Children.Add(this.labHeader);
//set the header to be the stack panel.
this.Header = sp;
//override the default HeaderProperty
CheckableGroupBox.HeaderProperty.OverrideMetadata(
typeof(object),
new PropertyMetadata("", OnHeaderChangedCallback)
);
}
}
Однако код не работает. Когда я добавляю CheckableGroupBox (в режиме конструктора) к окну, он запрашивает:
Невозможно создать экземпляр «CheckableGroupBox», тип Object должен быть производным от DependencyObject.
Есть идеи?