/// <summary> /// Adds a custom button to the list of buttons. /// </summary> /// <param name="dataWindowButton">The data window button.</param> /// <exception cref="InvalidOperationException">The <paramref name="dataWindowButton"/> is added when the window is already loaded.</exception> protected void AddCustomButton(DataWindowButton dataWindowButton) { if (InternalGrid != null) { throw new InvalidOperationException(Exceptions.DataWindowButtonCanOnlyBeAddedWhenWindowIsNotLoaded); } _buttons.Add(dataWindowButton); }
/// <summary> /// Initializes a new instance of the <see cref="SimpleDataWindow" /> class. /// </summary> /// <param name="viewModel">The view model.</param> /// <param name="mode">The data window mode.</param> /// <param name="additionalButtons">The additional buttons.</param> /// <exception cref="System.NotSupportedException"></exception> protected SimpleDataWindow(IViewModel viewModel, DataWindowMode mode = DataWindowMode.OkCancel, IEnumerable<DataWindowButton> additionalButtons = null) { _logic = new WindowLogic(this, null, viewModel); _logic.PropertyChanged += (sender, e) => PropertyChanged.SafeInvoke(this, e); _logic.ViewModelChanged += (sender, e) => ViewModelChanged.SafeInvoke(this, e); _logic.ViewModelPropertyChanged += (sender, e) => ViewModelPropertyChanged.SafeInvoke(this, e); Loaded += (sender, e) => _viewLoaded.SafeInvoke(this); Unloaded += (sender, e) => _viewUnloaded.SafeInvoke(this); DataContextChanged += (sender, e) => _viewDataContextChanged.SafeInvoke(this, new DataContextChangedEventArgs(e.OldValue, e.NewValue)); if (additionalButtons != null) { foreach (var button in additionalButtons) { _buttons.Add(button); } } if (mode == DataWindowMode.OkCancel || mode == DataWindowMode.OkCancelApply) { var button = new DataWindowButton("Ok", async () => await OnOkExecuteAsync(), OnOkCanExecute); button.IsDefault = true; _buttons.Add(button); } if (mode == DataWindowMode.OkCancel || mode == DataWindowMode.OkCancelApply) { var button = new DataWindowButton("Cancel", async () => await OnCancelExecuteAsync(), OnCancelCanExecute); button.IsCancel = true; _buttons.Add(button); } if (mode == DataWindowMode.OkCancelApply) { var button = new DataWindowButton("Apply", OnApplyExcute, OnApplyCanExecute); _buttons.Add(button); } if (mode == DataWindowMode.Close) { var button = new DataWindowButton("Close", OnCloseExecute); _buttons.Add(button); } // Call manually the first time (for injected view models) OnViewModelChanged(); this.FixBlurriness(); }
/// <summary> /// Invoked when the control has been initialized. /// </summary> /// <param name="e">The event args.</param> protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); if (CatelEnvironment.IsInDesignMode) { return; } var newContentAsFrameworkElement = Content as FrameworkElement; if (_isWrapped || !WrapControlService.CanBeWrapped(newContentAsFrameworkElement)) { return; } var languageService = ServiceLocator.Default.ResolveType <ILanguageService>(); if (IsOKButtonAvailable) { var button = DataWindowButton.FromAsync(languageService.GetString("OK"), OnOkExecuteAsync, OnOkCanExecute); button.IsDefault = DefaultButton == DataWindowDefaultButton.OK; _buttons.Add(button); } if (IsCancelButtonAvailable) { var button = DataWindowButton.FromAsync(languageService.GetString("Cancel"), OnCancelExecuteAsync, OnCancelCanExecute); button.IsCancel = true; _buttons.Add(button); } if (IsApplyButtonAvailable) { var button = DataWindowButton.FromAsync(languageService.GetString("Apply"), OnApplyExecuteAsync, OnApplyCanExecute); button.IsDefault = DefaultButton == DataWindowDefaultButton.Apply; _buttons.Add(button); } if (IsCloseButtonAvailable) { var button = DataWindowButton.FromSync(languageService.GetString("Close"), OnCloseExecute, OnCloseCanExecute); button.IsDefault = DefaultButton == DataWindowDefaultButton.Close; _buttons.Add(button); } foreach (var button in _buttons) { _commands.Add(button.Command); } var wrapOptions = WrapControlServiceWrapOptions.GenerateWarningAndErrorValidatorForDataContext | WrapControlServiceWrapOptions.GenerateAdornerDecorator | WrapControlServiceWrapOptions.ExplicitlyAddApplicationResourcesDictionary; switch (_infoBarMessageControlGenerationMode) { case InfoBarMessageControlGenerationMode.None: break; case InfoBarMessageControlGenerationMode.Inline: wrapOptions |= WrapControlServiceWrapOptions.GenerateInlineInfoBarMessageControl; break; case InfoBarMessageControlGenerationMode.Overlay: wrapOptions |= WrapControlServiceWrapOptions.GenerateOverlayInfoBarMessageControl; break; } _isWrapped = true; var contentGrid = WrapControlService.Wrap(newContentAsFrameworkElement, wrapOptions, _buttons.ToArray(), this); var internalGrid = contentGrid.FindVisualDescendant(obj => (obj is FrameworkElement) && string.Equals(((FrameworkElement)obj).Name, WrapControlServiceControlNames.InternalGridName)) as Grid; if (internalGrid != null) { internalGrid.SetResourceReference(StyleProperty, "WindowGridStyle"); if (_focusFirstControl) { newContentAsFrameworkElement.FocusFirstControl(); } _defaultOkCommand = (from button in _buttons where button.IsDefault select button.Command).FirstOrDefault(); _defaultOkElement = WrapControlService.GetWrappedElement <ButtonBase>(contentGrid, WrapControlServiceControlNames.DefaultOkButtonName); _defaultCancelCommand = (from button in _buttons where button.IsCancel select button.Command).FirstOrDefault(); InternalGrid = internalGrid; OnInternalGridChanged(); } }
/// <summary> /// Invoked when the content of this control has been changed. This method will add the dynamic controls automatically. /// </summary> /// <param name="oldContent">Old content.</param> /// <param name="newContent">New content.</param> protected override void OnContentChanged(object oldContent, object newContent) { base.OnContentChanged(oldContent, newContent); if (CatelEnvironment.IsInDesignMode) { return; } if (!WrapControlHelper.CanBeWrapped(newContent as FrameworkElement) || _isWrapped) { return; } var languageService = ServiceLocator.Default.ResolveType<ILanguageService>(); if (IsOKButtonAvailable) { var button = new DataWindowButton(languageService.GetString("OK"), OnOkExecute, OnOkCanExecute); button.IsDefault = (DefaultButton == DataWindowDefaultButton.OK); _buttons.Add(button); } if (IsCancelButtonAvailable) { var button = new DataWindowButton(languageService.GetString("Cancel"), OnCancelExecute, OnCancelCanExecute); button.IsCancel = true; _buttons.Add(button); } if (IsApplyButtonAvailable) { var button = new DataWindowButton(languageService.GetString("Apply"), OnApplyExcute, OnApplyCanExecute); button.IsDefault = (DefaultButton == DataWindowDefaultButton.Apply); _buttons.Add(button); } if (IsCloseButtonAvailable) { var button = new DataWindowButton(languageService.GetString("Close"), OnCloseExecute, OnCloseCanExecute); button.IsDefault = (DefaultButton == DataWindowDefaultButton.Close); _buttons.Add(button); } foreach (DataWindowButton button in _buttons) { _commands.Add(button.Command); } var wrapOptions = WrapOptions.GenerateWarningAndErrorValidatorForDataContext; switch (_infoBarMessageControlGenerationMode) { case InfoBarMessageControlGenerationMode.None: break; case InfoBarMessageControlGenerationMode.Inline: wrapOptions |= WrapOptions.GenerateInlineInfoBarMessageControl; break; case InfoBarMessageControlGenerationMode.Overlay: wrapOptions |= WrapOptions.GenerateOverlayInfoBarMessageControl; break; } _isWrapped = true; var contentGrid = WrapControlHelper.Wrap((FrameworkElement)newContent, wrapOptions, _buttons.ToArray(), this); var internalGrid = contentGrid.FindVisualDescendant(obj => (obj is FrameworkElement) && string.Equals(((FrameworkElement)obj).Name, WrapControlHelper.InternalGridName)) as Grid; if (internalGrid != null) { #if SILVERLIGHT internalGrid.Style = Application.Current.Resources["WindowGridStyle"] as Style; #else internalGrid.SetResourceReference(StyleProperty, "WindowGridStyle"); ((UIElement)newContent).FocusFirstControl(); #endif _defaultOkCommand = (from button in _buttons where button.IsDefault select button.Command).FirstOrDefault(); _defaultOkElement = WrapControlHelper.GetWrappedElement<ButtonBase>(contentGrid, WrapControlHelper.DefaultOkButtonName); _defaultCancelCommand = (from button in _buttons where button.IsCancel select button.Command).FirstOrDefault(); InternalGrid = internalGrid; OnInternalGridChanged(); } }
/// <summary> /// Adds a custom button to the list of buttons. /// </summary> /// <param name="dataWindowButton">The data window button.</param> /// <exception cref="InvalidOperationException">The <paramref name="dataWindowButton"/> is added when the window is already loaded.</exception> protected void AddCustomButton(DataWindowButton dataWindowButton) { _buttons.Add(dataWindowButton); }
/// <summary> /// Adds a custom button to the list of buttons. /// </summary> /// <param name="dataWindowButton">The data window button.</param> /// <exception cref="InvalidOperationException">The <paramref name="dataWindowButton"/> is added when the window is already loaded.</exception> protected void AddCustomButton(DataWindowButton dataWindowButton) { if (InternalGrid != null) { var languageService = ServiceLocator.Default.ResolveType<ILanguageService>(); throw new InvalidOperationException(languageService.GetString("DataWindowButtonCanOnlyBeAddedWhenWindowIsNotLoaded")); } _buttons.Add(dataWindowButton); }