Browse Source

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.

pull/1645/head
brianlagunas_cp 16 years ago
parent
commit
73ae2b52ba
  1. 95
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.cs
  2. 45
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.xaml
  3. 13
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/WindowState.cs
  4. 45
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml
  5. 1
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj

95
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.cs

@ -132,6 +132,13 @@ namespace Microsoft.Windows.Controls
set { SetValue(IconSourceProperty, value); } 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 #region Left
public static readonly DependencyProperty LeftProperty = DependencyProperty.Register("Left", typeof(double), typeof(ChildWindow), new PropertyMetadata(0.0, new PropertyChangedCallback(OnLeftPropertyChanged))); 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) private static void OnLeftPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{ {
ChildWindow dialog = (ChildWindow)obj; ChildWindow window = (ChildWindow)obj;
dialog.Left = dialog.GetRestrictedLeft(); window.Left = window.GetRestrictedLeft();
dialog.ProcessMove((double)e.NewValue - (double)e.OldValue, 0); window.ProcessMove((double)e.NewValue - (double)e.OldValue, 0);
} }
#endregion //Left #endregion //Left
#region OverlayBrush #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 public Brush OverlayBrush
{ {
get { return (Brush)GetValue(OverlayBrushProperty); } get { return (Brush)GetValue(OverlayBrushProperty); }
set { SetValue(OverlayBrushProperty, value); } 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 #endregion //OverlayBrush
#region OverlayOpacity #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 public double OverlayOpacity
{ {
get { return (double)GetValue(OverlayOpacityProperty); } get { return (double)GetValue(OverlayOpacityProperty); }
set { SetValue(OverlayOpacityProperty, value); } 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 #endregion //OverlayOpacity
#region Top #region Top
@ -203,9 +190,9 @@ namespace Microsoft.Windows.Controls
private static void OnTopPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) private static void OnTopPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{ {
ChildWindow dialog = (ChildWindow)obj; ChildWindow window = (ChildWindow)obj;
dialog.Top = dialog.GetRestrictedTop(); window.Top = window.GetRestrictedTop();
dialog.ProcessMove(0, (double)e.NewValue - (double)e.OldValue); window.ProcessMove(0, (double)e.NewValue - (double)e.OldValue);
} }
#endregion //TopProperty #endregion //TopProperty
@ -231,6 +218,23 @@ namespace Microsoft.Windows.Controls
set { SetValue(WindowOpacityProperty, value); } 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 //Dependency Properties
#endregion //Properties #endregion //Properties
@ -317,6 +321,37 @@ namespace Microsoft.Windows.Controls
return Top; 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() private void SetStartupPosition()
{ {
CenterChildWindow(); CenterChildWindow();
@ -349,13 +384,13 @@ namespace Microsoft.Windows.Controls
public void Show() public void Show()
{ {
Visibility = System.Windows.Visibility.Visible; SetWindowState(WindowState.Open);
} }
public void Close() public void Close()
{ {
Visibility = System.Windows.Visibility.Hidden; SetWindowState(WindowState.Closed);
} }
#endregion //Public #endregion //Public

45
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ChildWindow/ChildWindow.xaml

@ -79,23 +79,6 @@
</ObjectAnimationUsingKeyFrames> </ObjectAnimationUsingKeyFrames>
</Storyboard> </Storyboard>
</VisualState> </VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value=".55"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup> </VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<Border x:Name="Background" CornerRadius="0,0,2,0" Background="{StaticResource ChildWindowDarkBrush}"> <Border x:Name="Background" CornerRadius="0,0,2,0" Background="{StaticResource ChildWindowDarkBrush}">
@ -135,7 +118,13 @@
<Setter.Value> <Setter.Value>
<ControlTemplate TargetType="{x:Type local:ChildWindow}"> <ControlTemplate TargetType="{x:Type local:ChildWindow}">
<Grid x:Name="Root"> <Grid x:Name="Root">
<Grid x:Name="PART_Overlay" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="0" RenderTransformOrigin="0.5,0.5" Background="{TemplateBinding OverlayBrush}" Opacity="{TemplateBinding OverlayOpacity}"/> <Grid.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Grid.Resources>
<Grid x:Name="PART_Overlay" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="0" RenderTransformOrigin="0.5,0.5"
Background="{TemplateBinding OverlayBrush}"
Opacity="{TemplateBinding OverlayOpacity}"
Visibility="{TemplateBinding IsModal, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<Grid x:Name="PART_WindowRoot" HorizontalAlignment="Left" VerticalAlignment="Top"> <Grid x:Name="PART_WindowRoot" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid.RenderTransform> <Grid.RenderTransform>
<TransformGroup> <TransformGroup>
@ -170,24 +159,8 @@
<Border BorderBrush="#FFFFFFFF" BorderThickness="1" CornerRadius="1"/> <Border BorderBrush="#FFFFFFFF" BorderThickness="1" CornerRadius="1"/>
<Border Margin="1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0.1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"> <Border Margin="1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0.1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}">
<Grid> <ContentPresenter x:Name="Content" Content="{TemplateBinding Content}"
<Grid.RowDefinitions> ContentTemplate="{TemplateBinding ContentTemplate}" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ContentPresenter x:Name="Content" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Cursor="{TemplateBinding Cursor}"/>
</Grid>
</Grid>
</Border> </Border>
</Grid> </Grid>

13
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
}
}

45
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml

@ -499,23 +499,6 @@
</ObjectAnimationUsingKeyFrames> </ObjectAnimationUsingKeyFrames>
</Storyboard> </Storyboard>
</VisualState> </VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value=".55"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup> </VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<Border x:Name="Background" CornerRadius="0,0,2,0" Background="{StaticResource ChildWindowDarkBrush}"> <Border x:Name="Background" CornerRadius="0,0,2,0" Background="{StaticResource ChildWindowDarkBrush}">
@ -555,7 +538,13 @@
<Setter.Value> <Setter.Value>
<ControlTemplate TargetType="{x:Type local:ChildWindow}"> <ControlTemplate TargetType="{x:Type local:ChildWindow}">
<Grid x:Name="Root"> <Grid x:Name="Root">
<Grid x:Name="PART_Overlay" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="0" RenderTransformOrigin="0.5,0.5" Background="{TemplateBinding OverlayBrush}" Opacity="{TemplateBinding OverlayOpacity}"/> <Grid.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Grid.Resources>
<Grid x:Name="PART_Overlay" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="0" RenderTransformOrigin="0.5,0.5"
Background="{TemplateBinding OverlayBrush}"
Opacity="{TemplateBinding OverlayOpacity}"
Visibility="{TemplateBinding IsModal, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<Grid x:Name="PART_WindowRoot" HorizontalAlignment="Left" VerticalAlignment="Top"> <Grid x:Name="PART_WindowRoot" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid.RenderTransform> <Grid.RenderTransform>
<TransformGroup> <TransformGroup>
@ -590,24 +579,8 @@
<Border BorderBrush="#FFFFFFFF" BorderThickness="1" CornerRadius="1"/> <Border BorderBrush="#FFFFFFFF" BorderThickness="1" CornerRadius="1"/>
<Border Margin="1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0.1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"> <Border Margin="1" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0.1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}">
<Grid> <ContentPresenter x:Name="Content" Content="{TemplateBinding Content}"
<Grid.RowDefinitions> ContentTemplate="{TemplateBinding ContentTemplate}" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ContentPresenter x:Name="Content" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Cursor="{TemplateBinding Cursor}"/>
</Grid>
</Grid>
</Border> </Border>
</Grid> </Grid>

1
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj

@ -73,6 +73,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="BusyIndicator\BusyIndicator.cs" /> <Compile Include="BusyIndicator\BusyIndicator.cs" />
<Compile Include="ChildWindow\ChildWindow.cs" /> <Compile Include="ChildWindow\ChildWindow.cs" />
<Compile Include="ChildWindow\WindowState.cs" />
<Compile Include="MessageBox\MessageBox.cs" /> <Compile Include="MessageBox\MessageBox.cs" />
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>

Loading…
Cancel
Save