From 73ae2b52baf36fdaa57c66c72df62cefe204b34e Mon Sep 17 00:00:00 2001 From: brianlagunas_cp Date: Wed, 11 Aug 2010 00:03:11 +0000 Subject: [PATCH] restricted ChildWindow in container. fixed bug with ChildWindow zindex, added a WindowState property to ChildWindow which will control opening and closing the window through data binding; two states WindowState.Open and WindowState.Closed. Added OverlayBrush and Overlay Opacity properties allow users to modify the ChldWindow's OverLay element. --- .../ChildWindow/ChildWindow.cs | 95 +++++++++++++------ .../ChildWindow/ChildWindow.xaml | 45 ++------- .../ChildWindow/WindowState.cs | 13 +++ .../WPFToolkit.Extended/Themes/Generic.xaml | 45 ++------- .../WPFToolkit.Extended.csproj | 1 + 5 files changed, 97 insertions(+), 102 deletions(-) create mode 100644 ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/WindowState.cs diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.cs index 9c6d7704..c22921cb 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.cs @@ -132,6 +132,13 @@ namespace Microsoft.Windows.Controls set { SetValue(IconSourceProperty, value); } } + public static readonly DependencyProperty IsModalProperty = DependencyProperty.Register("IsModal", typeof(bool), typeof(ChildWindow), new UIPropertyMetadata(true)); + public bool IsModal + { + get { return (bool)GetValue(IsModalProperty); } + set { SetValue(IsModalProperty, value); } + } + #region Left public static readonly DependencyProperty LeftProperty = DependencyProperty.Register("Left", typeof(double), typeof(ChildWindow), new PropertyMetadata(0.0, new PropertyChangedCallback(OnLeftPropertyChanged))); @@ -143,53 +150,33 @@ namespace Microsoft.Windows.Controls private static void OnLeftPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { - ChildWindow dialog = (ChildWindow)obj; - dialog.Left = dialog.GetRestrictedLeft(); - dialog.ProcessMove((double)e.NewValue - (double)e.OldValue, 0); + ChildWindow window = (ChildWindow)obj; + window.Left = window.GetRestrictedLeft(); + window.ProcessMove((double)e.NewValue - (double)e.OldValue, 0); } #endregion //Left #region OverlayBrush - public static readonly DependencyProperty OverlayBrushProperty = DependencyProperty.Register("OverlayBrush", typeof(Brush), typeof(ChildWindow), new PropertyMetadata(OnOverlayBrushPropertyChanged)); + public static readonly DependencyProperty OverlayBrushProperty = DependencyProperty.Register("OverlayBrush", typeof(Brush), typeof(ChildWindow)); public Brush OverlayBrush { get { return (Brush)GetValue(OverlayBrushProperty); } set { SetValue(OverlayBrushProperty, value); } } - private static void OnOverlayBrushPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - ChildWindow cw = (ChildWindow)d; - - if (cw.Overlay != null) - { - cw.Overlay.Background = (Brush)e.NewValue; - } - } - #endregion //OverlayBrush #region OverlayOpacity - public static readonly DependencyProperty OverlayOpacityProperty = DependencyProperty.Register("OverlayOpacity", typeof(double), typeof(ChildWindow), new PropertyMetadata(OnOverlayOpacityPropertyChanged)); + public static readonly DependencyProperty OverlayOpacityProperty = DependencyProperty.Register("OverlayOpacity", typeof(double), typeof(ChildWindow)); public double OverlayOpacity { get { return (double)GetValue(OverlayOpacityProperty); } set { SetValue(OverlayOpacityProperty, value); } } - private static void OnOverlayOpacityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - ChildWindow cw = (ChildWindow)d; - - if (cw.Overlay != null) - { - cw.Overlay.Opacity = (double)e.NewValue; - } - } - #endregion //OverlayOpacity #region Top @@ -203,9 +190,9 @@ namespace Microsoft.Windows.Controls private static void OnTopPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { - ChildWindow dialog = (ChildWindow)obj; - dialog.Top = dialog.GetRestrictedTop(); - dialog.ProcessMove(0, (double)e.NewValue - (double)e.OldValue); + ChildWindow window = (ChildWindow)obj; + window.Top = window.GetRestrictedTop(); + window.ProcessMove(0, (double)e.NewValue - (double)e.OldValue); } #endregion //TopProperty @@ -231,6 +218,23 @@ namespace Microsoft.Windows.Controls set { SetValue(WindowOpacityProperty, value); } } + #region WindowState + + public static readonly DependencyProperty WindowStateProperty = DependencyProperty.Register("WindowState", typeof(WindowState), typeof(ChildWindow), new PropertyMetadata(WindowState.Closed, new PropertyChangedCallback(OnWindowStatePropertyChanged))); + public WindowState WindowState + { + get { return (WindowState)GetValue(WindowStateProperty); } + set { SetValue(WindowStateProperty, WindowState); } + } + + private static void OnWindowStatePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) + { + ChildWindow window = (ChildWindow)obj; + window.SetWindowState((WindowState)e.NewValue); + } + + #endregion //WindowState + #endregion //Dependency Properties #endregion //Properties @@ -317,6 +321,37 @@ namespace Microsoft.Windows.Controls return Top; } + private void SetWindowState(WindowState state) + { + switch (state) + { + case WindowState.Closed: + { + Visibility = System.Windows.Visibility.Hidden; + break; + } + case WindowState.Open: + { + Visibility = System.Windows.Visibility.Visible; + SetZIndex(); + break; + } + } + } + + private void SetZIndex() + { + if (_parent != null) + { + int parentIndex = (int)_parent.GetValue(Canvas.ZIndexProperty); + this.SetValue(Canvas.ZIndexProperty, ++parentIndex); + } + else + { + this.SetValue(Canvas.ZIndexProperty, 1); + } + } + private void SetStartupPosition() { CenterChildWindow(); @@ -349,13 +384,13 @@ namespace Microsoft.Windows.Controls public void Show() { - Visibility = System.Windows.Visibility.Visible; + SetWindowState(WindowState.Open); } public void Close() { - Visibility = System.Windows.Visibility.Hidden; + SetWindowState(WindowState.Closed); } #endregion //Public diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.xaml index 0e9b45da..45bcc828 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.xaml +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.xaml @@ -79,23 +79,6 @@ - - - - - - - - - - - - - - - - - @@ -135,7 +118,13 @@ - + + + + @@ -170,24 +159,8 @@ - - - - - - - - - - - - - - - - + diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/WindowState.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/WindowState.cs new file mode 100644 index 00000000..cc001a25 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/WindowState.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.Windows.Controls +{ + public enum WindowState + { + Closed, + Open + } +} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml index 73c3bbfa..8ba81fbd 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml @@ -499,23 +499,6 @@ - - - - - - - - - - - - - - - - - @@ -555,7 +538,13 @@ - + + + + @@ -590,24 +579,8 @@ - - - - - - - - - - - - - - - - + diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj index 26a1f1b9..915333ff 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj @@ -73,6 +73,7 @@ + Code