protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
if (CatelEnvironment.IsInDesignMode)
{
return;
}
var newContentAsFrameworkElement = newContent as FrameworkElement;
if (_isWrapped || !WrapControlHelper.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 = 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(newContentAsFrameworkElement, 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");
newContentAsFrameworkElement.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();
}
}