Моя программа должна иметь одну цветовую схему для дневных часов и более темную для ночных часов.Я определил перечисление TimesOfDay:
public enum TimesOfDay { DayTime, NightTime }
У меня есть пользовательский элемент управления, полученный из окна с именем CarSystemDialog:
public class CarSystemDialog : Window {
public static readonly DependencyProperty TimeOfDayModeProperty =
DependencyProperty.Register( "TimeOfDayMode", typeof( TimesOfDay ), typeof( CarSystemDialog ),
new FrameworkPropertyMetadata( TimesOfDay.DayTime,
FrameworkPropertyMetadataOptions.AffectsRender,
new PropertyChangedCallback( OnTimeOfDayInvalidated ) ) );
public TimesOfDay TimeOfDayMode {
get { return (TimesOfDay) GetValue( TimeOfDayModeProperty ); }
set { SetValue( TimeOfDayModeProperty, value ); }
}
static CarSystemDialog() {
DefaultStyleKeyProperty.OverrideMetadata( typeof( CarSystemDialog ), new FrameworkPropertyMetadata( typeof( CarSystemDialog ) ) );
}
private void Grid_MouseLeftButtonDown( object sender, MouseButtonEventArgs e ) {
DragMove();
}
private static void OnTimeOfDayInvalidated( DependencyObject d, DependencyPropertyChangedEventArgs e ) {
// Convert the DependencyObject into an AlarmDisplayer instance
CarSystemDialog dialog = (CarSystemDialog) d;
// Let the instance handle the event.
dialog.OnTimeOfDayModeChanged( d, e );
}
public override void OnApplyTemplate() {
base.OnApplyTemplate();
Grid grid = (Grid) Template.FindName( "PART_TitleBar", this );
grid.MouseLeftButtonDown += Grid_MouseLeftButtonDown;
}
public virtual void OnTimeOfDayModeChanged( object sender, DependencyPropertyChangedEventArgs e ) {
}
}
Это прекрасно компилируется.
У меня есть UserControlкласс, который происходит от CarSystemDialog:
public partial class SettingsDialog : CarSystemDialog {
public static readonly DependencyProperty VolumeProperty =
DependencyProperty.Register( "Volume", typeof( double ), typeof( SettingsDialog ),
new PropertyMetadata( 0.5, new PropertyChangedCallback( OnVolumeInvalidated ) ) );
protected App Application { get; set; }
public double Volume {
get { return (double) GetValue( VolumeProperty ); }
set { SetValue( VolumeProperty, value ); }
}
public SettingsDialog()
: base() {
InitializeComponent();
// Initialize the Application property
Application = (App) App.Current;
// Get the current value of the Volume property
Volume = (double) Application.CurrentUserProfile.Volume;
}
private void AdvancedButton_Click( object sender, RoutedEventArgs e ) {
Application.CurrentUserProfile.Save();
Close();
MainWindow mainWindow = (MainWindow) Application.MainWindow;
mainWindow.ReadsDisplay.Visibility = Visibility.Collapsed;
mainWindow.AdvancedSettingsEditor.Visibility = Visibility.Visible;
e.Handled = true;
}
private void CloseButton_Click( object sender, RoutedEventArgs e ) {
MainWindow window = (MainWindow) Application.MainWindow;
window.Volume = Volume;
Application.ConfigurationFile.Save();
Close();
e.Handled = true;
}
private void DayButton_Click( object sender, RoutedEventArgs e ) {
MainWindow window = (MainWindow) Application.MainWindow;
window.DayButton_Click( sender, e );
e.Handled = true;
}
private void Grid_MouseLeftButtonDown( object sender, MouseButtonEventArgs e ) {
DragMove();
e.Handled = true;
}
public override void OnTimeOfDayModeChanged( object sender, DependencyPropertyChangedEventArgs e ) {
throw new NotImplementedException();
}
private void OnVolumeChanged( object sender, DependencyPropertyChangedEventArgs e ) {
Application.CurrentUserProfile.Volume = (double) e.NewValue;
}
private static void OnVolumeInvalidated( DependencyObject d, DependencyPropertyChangedEventArgs e ) {
SettingsDialog window = (SettingsDialog) d;
window.OnVolumeChanged( window, e );
}
private void NightButton_Click( object sender, RoutedEventArgs e ) {
MainWindow window = (MainWindow) Application.MainWindow;
window.NightButton_Click( sender, e );
e.Handled = true;
}
private void SettingsDialog_Closed( object sender, EventArgs e ) {
Application.CurrentUserProfile.Save();
}
}
}
Весь код этого класса компилируется нормально, но во время выполнения, когда создается экземпляр пользовательского элемента управления, я получаю следующую ошибку:
Инициализатор типа для «MyProject.MyDialog» выдал исключение: свойство «TimeOfDayMode» уже зарегистрировано «MyDialog».
В чем причина этой ошибки?Как мне это исправить?
Спасибо
Тони