diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/AssemblyVersionInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/AssemblyVersionInfo.cs
index 84bce886..d3cc2ce9 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/AssemblyVersionInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/AssemblyVersionInfo.cs
@@ -21,7 +21,7 @@
internal static class _XceedVersionInfo
{
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
- public const string BaseVersion = "2.9";
+ public const string BaseVersion = "3.0";
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
public const string Version = BaseVersion +
".0.0";
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/Properties/AssemblyInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/Properties/AssemblyInfo.cs
index c9b2ea8d..f8dc5d77 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/Properties/AssemblyInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Aero/Properties/AssemblyInfo.cs
@@ -25,12 +25,12 @@ using System;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle( "Xceed Extended WPF Toolkit - AvalonDock Aero Theme" )]
+[assembly: AssemblyTitle( "Xceed Toolkit for WPF - AvalonDock Aero Theme" )]
[assembly: AssemblyDescription( "This assembly implements the Aero Theme for the AvalonDock layout system." )]
[assembly: AssemblyCompany( "Xceed Software Inc." )]
-[assembly: AssemblyProduct( "Xceed Extended WPF Toolkit - AvalonDock" )]
-[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2015" )]
+[assembly: AssemblyProduct( "Xceed Toolkit for WPF - AvalonDock" )]
+[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2016" )]
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs
index 84bce886..d3cc2ce9 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/AssemblyVersionInfo.cs
@@ -21,7 +21,7 @@
internal static class _XceedVersionInfo
{
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
- public const string BaseVersion = "2.9";
+ public const string BaseVersion = "3.0";
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
public const string Version = BaseVersion +
".0.0";
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/Properties/AssemblyInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/Properties/AssemblyInfo.cs
index 82239c01..fe8545f1 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/Properties/AssemblyInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.Metro/Properties/AssemblyInfo.cs
@@ -25,12 +25,12 @@ using System;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle( "Xceed Extended WPF Toolkit - AvalonDock Metro Theme" )]
+[assembly: AssemblyTitle( "Xceed Toolkit for WPF - AvalonDock Metro Theme" )]
[assembly: AssemblyDescription( "This assembly implements the Metro Theme for the AvalonDock layout system." )]
[assembly: AssemblyCompany( "Xceed Software Inc." )]
-[assembly: AssemblyProduct( "Xceed Extended WPF Toolkit - AvalonDock" )]
-[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2015" )]
+[assembly: AssemblyProduct( "Xceed Toolkit for WPF - AvalonDock" )]
+[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2016" )]
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/AssemblyVersionInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/AssemblyVersionInfo.cs
index 84bce886..d3cc2ce9 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/AssemblyVersionInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/AssemblyVersionInfo.cs
@@ -21,7 +21,7 @@
internal static class _XceedVersionInfo
{
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
- public const string BaseVersion = "2.9";
+ public const string BaseVersion = "3.0";
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
public const string Version = BaseVersion +
".0.0";
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/Properties/AssemblyInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/Properties/AssemblyInfo.cs
index d96c1edc..39a96798 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/Properties/AssemblyInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock.Themes.VS2010/Properties/AssemblyInfo.cs
@@ -25,12 +25,12 @@ using System;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle( "Xceed Extended WPF Toolkit - AvalonDock" )]
+[assembly: AssemblyTitle( "Xceed Toolkit for WPF - AvalonDock" )]
[assembly: AssemblyDescription( "This assembly implements the VS2010 Theme for the AvalonDock layout system." )]
[assembly: AssemblyCompany( "Xceed Software Inc." )]
-[assembly: AssemblyProduct( "Xceed Extended WPF Toolkit - AvalonDock" )]
-[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2015" )]
+[assembly: AssemblyProduct( "Xceed Toolkit for WPF - AvalonDock" )]
+[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2016" )]
// Setting ComVisible to false makes the types in this assembly not visible
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs
index 84bce886..d3cc2ce9 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/AssemblyVersionInfo.cs
@@ -21,7 +21,7 @@
internal static class _XceedVersionInfo
{
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
- public const string BaseVersion = "2.9";
+ public const string BaseVersion = "3.0";
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
public const string Version = BaseVersion +
".0.0";
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs
index db4db6af..62b89456 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/LayoutFloatingWindowControl.cs
@@ -42,111 +42,111 @@ namespace Xceed.Wpf.AvalonDock.Controls
LayoutFloatingWindowControl.ContentProperty.OverrideMetadata(typeof(LayoutFloatingWindowControl), new FrameworkPropertyMetadata(null, null, new CoerceValueCallback(CoerceContentValue)));
AllowsTransparencyProperty.OverrideMetadata(typeof(LayoutFloatingWindowControl), new FrameworkPropertyMetadata(false));
ShowInTaskbarProperty.OverrideMetadata(typeof(LayoutFloatingWindowControl), new FrameworkPropertyMetadata(false));
- }
+ }
- static object CoerceContentValue(DependencyObject sender, object content)
+ static object CoerceContentValue( DependencyObject sender, object content )
{
- return new FloatingWindowContentHost(sender as LayoutFloatingWindowControl) { Content = content as UIElement };
+ return new FloatingWindowContentHost( sender as LayoutFloatingWindowControl ) { Content = content as UIElement };
}
protected class FloatingWindowContentHost : HwndHost
- {
- LayoutFloatingWindowControl _owner;
- public FloatingWindowContentHost(LayoutFloatingWindowControl owner)
{
- _owner = owner;
- var manager = _owner.Model.Root.Manager;
- }
+ LayoutFloatingWindowControl _owner;
+ public FloatingWindowContentHost(LayoutFloatingWindowControl owner)
+ {
+ _owner = owner;
+ var manager = _owner.Model.Root.Manager;
+ }
- HwndSource _wpfContentHost = null;
- Border _rootPresenter = null;
- DockingManager _manager = null;
+ HwndSource _wpfContentHost = null;
+ Border _rootPresenter = null;
+ DockingManager _manager = null;
- protected override System.Runtime.InteropServices.HandleRef BuildWindowCore(System.Runtime.InteropServices.HandleRef hwndParent)
- {
- _wpfContentHost = new HwndSource(new HwndSourceParameters()
+ protected override System.Runtime.InteropServices.HandleRef BuildWindowCore(System.Runtime.InteropServices.HandleRef hwndParent)
{
- ParentWindow = hwndParent.Handle,
- WindowStyle = Win32Helper.WS_CHILD | Win32Helper.WS_VISIBLE | Win32Helper.WS_CLIPSIBLINGS | Win32Helper.WS_CLIPCHILDREN,
- Width = 1,
- Height = 1
- });
-
- _rootPresenter = new Border() { Child = new AdornerDecorator() { Child = Content }, Focusable = true };
- _rootPresenter.SetBinding(Border.BackgroundProperty, new Binding("Background") { Source = _owner });
- _wpfContentHost.RootVisual = _rootPresenter;
- _wpfContentHost.SizeToContent = SizeToContent.Manual;
- _manager = _owner.Model.Root.Manager;
- _manager.InternalAddLogicalChild(_rootPresenter);
-
- return new HandleRef(this, _wpfContentHost.Handle);
- }
+ _wpfContentHost = new HwndSource(new HwndSourceParameters()
+ {
+ ParentWindow = hwndParent.Handle,
+ WindowStyle = Win32Helper.WS_CHILD | Win32Helper.WS_VISIBLE | Win32Helper.WS_CLIPSIBLINGS | Win32Helper.WS_CLIPCHILDREN,
+ Width = 1,
+ Height = 1
+ });
+
+ _rootPresenter = new Border() { Child = new AdornerDecorator() { Child = Content }, Focusable = true };
+ _rootPresenter.SetBinding(Border.BackgroundProperty, new Binding("Background") { Source = _owner });
+ _wpfContentHost.RootVisual = _rootPresenter;
+ _wpfContentHost.SizeToContent = SizeToContent.Manual;
+ _manager = _owner.Model.Root.Manager;
+ _manager.InternalAddLogicalChild(_rootPresenter);
+
+ return new HandleRef(this, _wpfContentHost.Handle);
+ }
- protected override void DestroyWindowCore(HandleRef hwnd)
- {
- _manager.InternalRemoveLogicalChild(_rootPresenter);
- if (_wpfContentHost != null)
+ protected override void DestroyWindowCore(HandleRef hwnd)
{
- _wpfContentHost.Dispose();
- _wpfContentHost = null;
+ _manager.InternalRemoveLogicalChild(_rootPresenter);
+ if (_wpfContentHost != null)
+ {
+ _wpfContentHost.Dispose();
+ _wpfContentHost = null;
+ }
}
- }
- public Visual RootVisual
- {
- get { return _rootPresenter; }
- }
+ public Visual RootVisual
+ {
+ get { return _rootPresenter; }
+ }
- protected override Size MeasureOverride(Size constraint)
- {
- if (Content == null)
- return base.MeasureOverride(constraint);
+ protected override Size MeasureOverride(Size constraint)
+ {
+ if (Content == null)
+ return base.MeasureOverride(constraint);
- Content.Measure(constraint);
- return Content.DesiredSize;
- }
+ Content.Measure(constraint);
+ return Content.DesiredSize;
+ }
- #region Content
-
- ///
- /// Content Dependency Property
- ///
- public static readonly DependencyProperty ContentProperty =
- DependencyProperty.Register("Content", typeof(UIElement), typeof(FloatingWindowContentHost),
- new FrameworkPropertyMetadata((UIElement)null,
- new PropertyChangedCallback(OnContentChanged)));
-
- ///
- /// Gets or sets the Content property. This dependency property
- /// indicates ....
- ///
- public UIElement Content
- {
- get { return (UIElement)GetValue(ContentProperty); }
- set { SetValue(ContentProperty, value); }
- }
+ #region Content
+
+ ///
+ /// Content Dependency Property
+ ///
+ public static readonly DependencyProperty ContentProperty =
+ DependencyProperty.Register("Content", typeof(UIElement), typeof(FloatingWindowContentHost),
+ new FrameworkPropertyMetadata((UIElement)null,
+ new PropertyChangedCallback(OnContentChanged)));
+
+ ///
+ /// Gets or sets the Content property. This dependency property
+ /// indicates ....
+ ///
+ public UIElement Content
+ {
+ get { return (UIElement)GetValue(ContentProperty); }
+ set { SetValue(ContentProperty, value); }
+ }
- ///
- /// Handles changes to the Content property.
- ///
- private static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- ((FloatingWindowContentHost)d).OnContentChanged(e);
- }
+ ///
+ /// Handles changes to the Content property.
+ ///
+ private static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ ((FloatingWindowContentHost)d).OnContentChanged(e);
+ }
- ///
- /// Provides derived classes an opportunity to handle changes to the Content property.
- ///
- protected virtual void OnContentChanged(DependencyPropertyChangedEventArgs e)
- {
- if (_rootPresenter != null)
- _rootPresenter.Child = Content;
- }
+ ///
+ /// Provides derived classes an opportunity to handle changes to the Content property.
+ ///
+ protected virtual void OnContentChanged(DependencyPropertyChangedEventArgs e)
+ {
+ if (_rootPresenter != null)
+ _rootPresenter.Child = Content;
+ }
- #endregion
- }
+ #endregion
+ }
ILayoutElement _model;
@@ -200,7 +200,10 @@ namespace Xceed.Wpf.AvalonDock.Controls
if (Content != null)
{
var host = Content as FloatingWindowContentHost;
- host.Dispose();
+ if( host != null )
+ {
+ host.Dispose();
+ }
if (_hwndSrc != null)
{
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/DockingManager.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/DockingManager.cs
index 68e139ab..13195377 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/DockingManager.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/DockingManager.cs
@@ -1249,6 +1249,14 @@ namespace Xceed.Wpf.AvalonDock
}
}
+ public System.Collections.IEnumerator LogicalChildrenPublic
+ {
+ get
+ {
+ return this.LogicalChildren;
+ }
+ }
+
internal void InternalAddLogicalChild(object element)
{
@@ -2044,6 +2052,7 @@ namespace Xceed.Wpf.AvalonDock
{
(documentToRemove.Parent as ILayoutContainer).RemoveChild(
documentToRemove);
+ this.RemoveViewFromLogicalChild( documentToRemove );
}
}
}
@@ -2119,6 +2128,7 @@ namespace Xceed.Wpf.AvalonDock
{
(documentToRemove.Parent as ILayoutContainer).RemoveChild(
documentToRemove);
+ this.RemoveViewFromLogicalChild( documentToRemove );
}
}
@@ -2143,6 +2153,7 @@ namespace Xceed.Wpf.AvalonDock
{
(documentToRemove.Parent as ILayoutContainer).RemoveChild(
documentToRemove);
+ this.RemoveViewFromLogicalChild( documentToRemove );
}
var documentsSourceAsNotifier = documentsSource as INotifyCollectionChanged;
@@ -2167,6 +2178,8 @@ namespace Xceed.Wpf.AvalonDock
if( document.CloseDocument() )
{
+ this.RemoveViewFromLogicalChild( document );
+
if( DocumentClosed != null )
{
var evargs = new DocumentClosedEventArgs( document );
@@ -2394,6 +2407,7 @@ namespace Xceed.Wpf.AvalonDock
anchorableToRemove.Content = null;
(anchorableToRemove.Parent as ILayoutContainer).RemoveChild(
anchorableToRemove);
+ this.RemoveViewFromLogicalChild( anchorableToRemove );
}
}
}
@@ -2484,6 +2498,7 @@ namespace Xceed.Wpf.AvalonDock
{
(anchorableToRemove.Parent as ILayoutContainer).RemoveChild(
anchorableToRemove);
+ this.RemoveViewFromLogicalChild( anchorableToRemove );
}
}
@@ -2506,6 +2521,7 @@ namespace Xceed.Wpf.AvalonDock
{
(anchorableToRemove.Parent as ILayoutContainer).RemoveChild(
anchorableToRemove);
+ this.RemoveViewFromLogicalChild( anchorableToRemove );
}
var anchorablesSourceAsNotifier = anchorablesSource as INotifyCollectionChanged;
@@ -2521,6 +2537,7 @@ namespace Xceed.Wpf.AvalonDock
if (model != null )
{
model.CloseAnchorable();
+ this.RemoveViewFromLogicalChild( anchorable );
}
}
@@ -2554,6 +2571,18 @@ namespace Xceed.Wpf.AvalonDock
content.DockAsDocument();
}
+ private void RemoveViewFromLogicalChild( LayoutContent layoutContent )
+ {
+ if( layoutContent == null )
+ return;
+
+ var layoutItem = this.GetLayoutItemFromModel( layoutContent );
+ if( layoutItem != null )
+ {
+ this.InternalRemoveLogicalChild( layoutItem.View );
+ }
+ }
+
#region ActiveContent
///
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Properties/AssemblyInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Properties/AssemblyInfo.cs
index 7ebdb67a..f82cf8c3 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Properties/AssemblyInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Properties/AssemblyInfo.cs
@@ -25,12 +25,12 @@ using System;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle( "Xceed Extended WPF Toolkit - AvalonDock" )]
+[assembly: AssemblyTitle( "Xceed Toolkit for WPF - AvalonDock" )]
[assembly: AssemblyDescription( "This assembly implements the Xceed.Wpf.AvalonDock namespace, a docking layout system for the Windows Presentation Framework." )]
[assembly: AssemblyCompany( "Xceed Software Inc." )]
-[assembly: AssemblyProduct( "Xceed Extended WPF Toolkit - AvalonDock" )]
-[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2015" )]
+[assembly: AssemblyProduct( "Xceed Toolkit for WPF - AvalonDock" )]
+[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2016" )]
[assembly: AssemblyCulture( "" )]
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/AssemblyVersionInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/AssemblyVersionInfo.cs
index 0d5c200c..35aedd63 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/AssemblyVersionInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/AssemblyVersionInfo.cs
@@ -19,7 +19,7 @@
internal static class _XceedVersionInfo
{
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
- public const string BaseVersion = "2.9";
+ public const string BaseVersion = "3.0";
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
public const string Version = BaseVersion + ".0.0";
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/Properties/AssemblyInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/Properties/AssemblyInfo.cs
index 43e34d10..fd29c34b 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/Properties/AssemblyInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.DataGrid/Properties/AssemblyInfo.cs
@@ -31,12 +31,12 @@ using System.Windows.Markup;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle( "Xceed Extended WPF Toolkit - DataGrid" )]
+[assembly: AssemblyTitle( "Xceed Toolkit for WPF - DataGrid" )]
[assembly: AssemblyDescription( "This assembly implements the Xceed.Wpf.DataGrid namespace, a data grid control for the Windows Presentation Framework." )]
[assembly: AssemblyCompany( "Xceed Software Inc." )]
-[assembly: AssemblyProduct( "Xceed Extended WPF Toolkit - DataGrid" )]
-[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2015" )]
+[assembly: AssemblyProduct( "Xceed Toolkit for WPF - DataGrid" )]
+[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2016" )]
[assembly: CLSCompliant( true )]
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.ico b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.ico
index 77e821e7..94eeac58 100644
Binary files a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.ico and b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.ico differ
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.xaml
index aeae0c93..cfd75b51 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/App.xaml
@@ -1,14 +1,14 @@
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:Xceed.Wpf.Toolkit.LiveExplorer"
+ xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
+ xmlns:sys="clr-namespace:System;assembly=mscorlib"
+ Title="DropDown and Split Buttons">
The DropDownButton control is a button that when clicked displays a drop down in which you can place any custom content within.
@@ -27,6 +28,15 @@
The SplitButton control is a button that can be clicked and also provides a drop down in which you can place any custom content within.
+
+
+
+
+
+
+
@@ -39,6 +49,11 @@
+
+
+
+
+
+
+
+
@@ -75,6 +103,7 @@
HorizontalAlignment="Left"
Content="Click Me"
MaxDropDownHeight="{Binding Value, ElementName=maxDropDownHeight}"
+ DropDownPosition="{Binding SelectedItem, ElementName=dropDownPosition}"
Click="DropDownButton_Click">
@@ -96,6 +125,7 @@
HorizontalAlignment="Left"
Content="Click Me"
MaxDropDownHeight="{Binding Value, ElementName=maxDropDownHeight}"
+ DropDownPosition="{Binding SelectedItem, ElementName=dropDownPosition}"
Click="SplitButton_Click">
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.cs.txt b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.cs.txt
index adf3bb71..53bd8cdb 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.cs.txt
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.cs.txt
@@ -1,14 +1,14 @@
/***************************************************************************************
- Extended WPF Toolkit
+ Toolkit for WPF
- Copyright (C) 2007-2015 Xceed Software Inc.
+ Copyright (C) 2007-2016 Xceed Software Inc.
This program is provided to you under the terms of the Microsoft Public
License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
For more features, controls, and fast professional support,
- pick up the Plus Edition at http://xceed.com/wpf_toolkit
+ pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.txt b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.txt
index 3030ab75..af502785 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.txt
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/FilePickerView.xaml.txt
@@ -1,14 +1,14 @@
+
+
+
+
+
+ The MultiCalendar combines X Microsoft Calendars that can be positioned in a grid with rows and columns. The selected dates, blackout dates and highlighted dates can be chosen from any calendar. The MultiCalendar will have a fast response no matter how many CalendarDayButtons are selected.
+
+
+ The Background/Foreground of any CalendarDayButton can be easily customized based on its state(selected/highlighted/blackout/mouseOver/focused/today) and the background of any Calendar can be customized with an image or a brush.
+
+
+ This feature is only available in the "Plus" version.
+
+
+ Click here for more details about Xceed Toolkit Plus for WPF.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.cs.txt b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.cs.txt
index 1fbd7bb9..1cbf8761 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.cs.txt
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.cs.txt
@@ -1,14 +1,14 @@
/***************************************************************************************
- Extended WPF Toolkit
+ Toolkit for WPF
- Copyright (C) 2007-2015 Xceed Software Inc.
+ Copyright (C) 2007-2016 Xceed Software Inc.
This program is provided to you under the terms of the Microsoft Public
License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
For more features, controls, and fast professional support,
- pick up the Plus Edition at http://xceed.com/wpf_toolkit
+ pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.txt b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.txt
index 61f28c02..f224c295 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.txt
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/CodeFiles/MultiColumnComboBoxView.xaml.txt
@@ -1,14 +1,14 @@
@@ -413,7 +415,7 @@
Value="True">
+ Value="{StaticResource SampleDefaultBrush}" />
@@ -436,12 +438,16 @@
-
+
-
+
+
@@ -621,7 +630,11 @@
+ IsPlusOnlyFeature="True" />
+
-
+ Fill="{StaticResource SampleDefaultBrush}" />
- Extended WPF Toolkit
+ NavigateUri="https://xceed.com/xceed-toolkit-plus-for-wpf/">
+ Toolkit Plus
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/MainWindow.xaml.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/MainWindow.xaml.cs
index 1ed144ab..36eed46a 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/MainWindow.xaml.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/MainWindow.xaml.cs
@@ -1,14 +1,14 @@
/*************************************************************************************
- Extended WPF Toolkit
+ Toolkit for WPF
- Copyright (C) 2007-2015 Xceed Software Inc.
+ Copyright (C) 2007-2016 Xceed Software Inc.
This program is provided to you under the terms of the Microsoft Public
License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
For more features, controls, and fast professional support,
- pick up the Plus Edition at http://xceed.com/wpf_toolkit
+ pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/AssemblyInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/AssemblyInfo.cs
index 37166cf5..680187e5 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/AssemblyInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/AssemblyInfo.cs
@@ -7,11 +7,11 @@ using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle( "Xceed Extended WPF Toolkit LiveExplorer" )]
+[assembly: AssemblyTitle( "Xceed Toolkit for WPF LiveExplorer" )]
[assembly: AssemblyDescription( "" )]
[assembly: AssemblyCompany( "Xceed Software Inc." )]
-[assembly: AssemblyProduct( "Xceed Extended WPF Toolkit" )]
-[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2015" )]
+[assembly: AssemblyProduct( "Xceed Toolkit for WPF" )]
+[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2007-2016" )]
[assembly: AssemblyCulture( "" )]
// Setting ComVisible to false makes the types in this assembly not visible
@@ -49,8 +49,8 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion( "2.9.*" )]
-[assembly: AssemblyFileVersion( "2.9.0.0" )]
+[assembly: AssemblyVersion( "3.0.*" )]
+[assembly: AssemblyFileVersion( "3.0.0.0" )]
#pragma warning disable 1699
[assembly: AssemblyDelaySign( false )]
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/Resources.resx b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/Resources.resx
index 41922967..2b8c700e 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/Resources.resx
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Properties/Resources.resx
@@ -3,7 +3,7 @@
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:Xceed.Wpf.Toolkit.LiveExplorer"
+ xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
+ xmlns:sys="clr-namespace:System;assembly=mscorlib"
+ Title="DropDown and Split Buttons">
The DropDownButton control is a button that when clicked displays a drop down in which you can place any custom content within.
@@ -27,6 +28,15 @@
The SplitButton control is a button that can be clicked and also provides a drop down in which you can place any custom content within.
+
+
+
+
+
+
+
@@ -39,6 +49,11 @@
+
+
+
+
+
+
+
+
@@ -75,6 +103,7 @@
HorizontalAlignment="Left"
Content="Click Me"
MaxDropDownHeight="{Binding Value, ElementName=maxDropDownHeight}"
+ DropDownPosition="{Binding SelectedItem, ElementName=dropDownPosition}"
Click="DropDownButton_Click">
@@ -96,6 +125,7 @@
HorizontalAlignment="Left"
Content="Click Me"
MaxDropDownHeight="{Binding Value, ElementName=maxDropDownHeight}"
+ DropDownPosition="{Binding SelectedItem, ElementName=dropDownPosition}"
Click="SplitButton_Click">
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Button/Views/DropDownSplitButtonView.xaml.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Button/Views/DropDownSplitButtonView.xaml.cs
index 07fd4ea0..514308b9 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Button/Views/DropDownSplitButtonView.xaml.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Button/Views/DropDownSplitButtonView.xaml.cs
@@ -1,14 +1,14 @@
/***************************************************************************************
- Extended WPF Toolkit
+ Toolkit for WPF
- Copyright (C) 2007-2015 Xceed Software Inc.
+ Copyright (C) 2007-2016 Xceed Software Inc.
This program is provided to you under the terms of the Microsoft Public
License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
For more features, controls, and fast professional support,
- pick up the Plus Edition at http://xceed.com/wpf_toolkit
+ pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Calculator/Views/CalculatorView.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Calculator/Views/CalculatorView.xaml
index a97f678c..894a52c8 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Calculator/Views/CalculatorView.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Calculator/Views/CalculatorView.xaml
@@ -1,14 +1,14 @@
+
+
+
+
+
+ The MultiCalendar combines X Microsoft Calendars that can be positioned in a grid with rows and columns. The selected dates, blackout dates and highlighted dates can be chosen from any calendar. The MultiCalendar will have a fast response no matter how many CalendarDayButtons are selected.
+
+
+ The Background/Foreground of any CalendarDayButton can be easily customized based on its state(selected/highlighted/blackout/mouseOver/focused/today) and the background of any Calendar can be customized with an image or a brush.
+
+
+ This feature is only available in the "Plus" version.
+
+
+ Click here for more details about Xceed Toolkit Plus for WPF.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/MultiCalendar/Views/MultiCalendarView.xaml.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/MultiCalendar/Views/MultiCalendarView.xaml.cs
new file mode 100644
index 00000000..e6f2523b
--- /dev/null
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/MultiCalendar/Views/MultiCalendarView.xaml.cs
@@ -0,0 +1,45 @@
+/*************************************************************************************
+
+ Toolkit for WPF
+
+ Copyright (C) 2007-2014 Xceed Software Inc.
+
+ This program is provided to you under the terms of the Microsoft Public
+ License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
+
+ For more features, controls, and fast professional support,
+ pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
+
+ Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
+
+ ***********************************************************************************/
+
+using System.Windows.Controls;
+using System;
+using System.Windows.Media;
+using System.Windows;
+
+namespace Xceed.Wpf.Toolkit.LiveExplorer.Samples.MultiCalendar.Views
+{
+ ///
+ /// Interaction logic for MultiCalendarView.xaml
+ ///
+ public partial class MultiCalendarView : DemoView
+ {
+ public MultiCalendarView()
+ {
+ InitializeComponent();
+ }
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Numeric/Views/NumericView.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Numeric/Views/NumericView.xaml
index d7025191..9f46a868 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Numeric/Views/NumericView.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Numeric/Views/NumericView.xaml
@@ -1,14 +1,14 @@
+
+
+
+
+ The WatermarkPasswordBox is a PasswordBox where you can enter a secure password and display a watermark when the password is not defined.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Text/Views/WatermarkPasswordBoxView.xaml.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Text/Views/WatermarkPasswordBoxView.xaml.cs
new file mode 100644
index 00000000..c09b86ce
--- /dev/null
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Text/Views/WatermarkPasswordBoxView.xaml.cs
@@ -0,0 +1,39 @@
+/**************************************************************************************
+
+ Toolkit for WPF
+
+ Copyright (C) 2007-2016 Xceed Software Inc.
+
+ This program is provided to you under the terms of the Microsoft Public
+ License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
+
+ For more features, controls, and fast professional support,
+ pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
+
+ Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
+
+ **************************************************************************************/
+
+
+namespace Xceed.Wpf.Toolkit.LiveExplorer.Samples.Text.Views
+{
+ ///
+ /// Interaction logic for WatermarkPasswordBoxView.xaml
+ ///
+ public partial class WatermarkPasswordBoxView : DemoView
+ {
+ public WatermarkPasswordBoxView()
+ {
+ InitializeComponent();
+ }
+
+ private void WatermarkPasswordBox_PasswordChanged( object sender, System.Windows.RoutedEventArgs e )
+ {
+ var passwordBox = sender as WatermarkPasswordBox;
+ if( passwordBox != null )
+ {
+ _passwordTextBlock.Text = passwordBox.Password;
+ }
+ }
+ }
+}
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Text/Views/WatermarkTextboxView.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Text/Views/WatermarkTextboxView.xaml
index db4921a5..f68a4584 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Text/Views/WatermarkTextboxView.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit.LiveExplorer/Samples/Text/Views/WatermarkTextboxView.xaml
@@ -1,14 +1,14 @@
+
@@ -252,6 +253,9 @@
MaterialControlsView.xaml
+
+ MultiCalendarView.xaml
+
NumericView.xaml
@@ -351,6 +355,9 @@
RichTextboxView.xaml
+
+ WatermarkPasswordBoxView.xaml
+
WatermarkTextboxView.xaml
@@ -613,6 +620,10 @@
MSBuild:Compile
Designer
+
+ MSBuild:Compile
+ Designer
+
MSBuild:Compile
Designer
@@ -733,6 +744,10 @@
MSBuild:Compile
Designer
+
+ MSBuild:Compile
+ Designer
+
MSBuild:Compile
Designer
@@ -844,9 +859,6 @@
-
-
-
@@ -1329,6 +1341,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/AssemblyVersionInfo.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/AssemblyVersionInfo.cs
index 84bce886..d3cc2ce9 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/AssemblyVersionInfo.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/AssemblyVersionInfo.cs
@@ -21,7 +21,7 @@
internal static class _XceedVersionInfo
{
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
- public const string BaseVersion = "2.9";
+ public const string BaseVersion = "3.0";
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )]
public const string Version = BaseVersion +
".0.0";
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Implementation/CalculatorUpDown.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Implementation/CalculatorUpDown.cs
index f30f30c4..61cc813e 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Implementation/CalculatorUpDown.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Implementation/CalculatorUpDown.cs
@@ -98,7 +98,7 @@ namespace Xceed.Wpf.Toolkit
protected virtual void OnIsOpenChanged( bool oldValue, bool newValue )
{
if( newValue )
- _initialValue = Value;
+ _initialValue = this.UpdateValueOnEnterKey ? this.ConvertTextToValue( this.TextBox.Text ) : this.Value;
}
#endregion //IsOpen
@@ -181,7 +181,14 @@ namespace Xceed.Wpf.Toolkit
{
if( IsValid( _calculator.Value ) )
{
- this.Value = _calculator.Value;
+ if( this.UpdateValueOnEnterKey )
+ {
+ this.TextBox.Text = (_calculator.Value != null) ? _calculator.Value.Value.ToString( this.FormatString, this.CultureInfo ) : null;
+ }
+ else
+ {
+ this.Value = _calculator.Value;
+ }
}
}
@@ -193,7 +200,8 @@ namespace Xceed.Wpf.Toolkit
{
if( _calculator != null )
{
- _calculator.InitializeToValue( this.Value );
+ var initValue = this.UpdateValueOnEnterKey ? this.ConvertTextToValue( this.TextBox.Text ) : this.Value;
+ _calculator.InitializeToValue( initValue );
_calculator.Focus();
}
}
@@ -231,7 +239,16 @@ namespace Xceed.Wpf.Toolkit
else if( e.Key == Key.Escape )
{
if( EnterClosesCalculator )
- Value = _initialValue;
+ {
+ if( this.UpdateValueOnEnterKey )
+ {
+ this.TextBox.Text = (_initialValue != null) ? _initialValue.Value.ToString( this.FormatString, this.CultureInfo ) : null;
+ }
+ else
+ {
+ this.Value = _initialValue;
+ }
+ }
CloseCalculatorUpDown( true );
e.Handled = true;
}
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Aero2.NormalColor.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Aero2.NormalColor.xaml
index c86d9e57..71d8097e 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Aero2.NormalColor.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Aero2.NormalColor.xaml
@@ -24,7 +24,8 @@
-
+
+
@@ -53,7 +54,12 @@
-
+
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Generic.xaml
index d12d9758..93a827ef 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Generic.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CalculatorUpDown/Themes/Generic.xaml
@@ -22,6 +22,10 @@
xmlns:conv="clr-namespace:Xceed.Wpf.Toolkit.Core.Converters"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
+
+
+
+
@@ -61,7 +65,12 @@
-
+
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Implementation/ChildWindow.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Implementation/ChildWindow.cs
index e303880c..4df3bbd5 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Implementation/ChildWindow.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Implementation/ChildWindow.cs
@@ -55,6 +55,7 @@ namespace Xceed.Wpf.Toolkit
private Grid _windowRoot;
private WindowControl _windowControl;
private bool _ignorePropertyChanged;
+ private bool _hasChildren;
private bool _hasWindowContainer;
#endregion //Private Members
@@ -333,6 +334,8 @@ namespace Xceed.Wpf.Toolkit
_modalLayer.Fill = OverlayBrush;
_modalLayer.Opacity = OverlayOpacity;
+
+ this.IsVisibleChanged += this.ChildWindow_IsVisibleChanged;
}
#endregion //Constructors
@@ -423,12 +426,48 @@ namespace Xceed.Wpf.Toolkit
Action action = () =>
{
if( FocusedElement != null )
+ {
+ _hasChildren = true;
FocusedElement.Focus();
+ }
+ else
+ {
+ //Focus first Focusable Child element of ChildWindow
+ var focusableChild = TreeHelper.FindChild( this.Content as DependencyObject, x => x.Focusable );
+ if( focusableChild != null )
+ {
+ _hasChildren = true;
+ focusableChild.Focus();
+ }
+ else
+ {
+ _hasChildren = false;
+ }
+ }
};
Dispatcher.BeginInvoke( DispatcherPriority.ApplicationIdle, action );
}
+ protected override void OnPreviewKeyDown( KeyEventArgs e )
+ {
+ base.OnPreviewKeyDown( e );
+
+ if( this.IsModal )
+ {
+ // Prevent MenuItem shortcuts while ChildWindow is modal.
+ if( Keyboard.IsKeyDown( Key.LeftAlt ) || Keyboard.IsKeyDown( Key.RightAlt ) )
+ {
+ e.Handled = true;
+ }
+ // Prevent Tab when no children
+ else if( (e.Key == Key.Tab) && !_hasChildren )
+ {
+ e.Handled = true;
+ }
+ }
+ }
+
protected override void OnKeyDown( KeyEventArgs e )
{
base.OnKeyDown( e );
@@ -617,6 +656,14 @@ namespace Xceed.Wpf.Toolkit
Top = GetRestrictedTop();
}
+ private void ChildWindow_IsVisibleChanged( object sender, DependencyPropertyChangedEventArgs e )
+ {
+ if( (bool)e.NewValue && this.IsModal )
+ {
+ this.Focus();
+ }
+ }
+
#endregion //Event Handlers
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Themes/Aero2.NormalColor.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Themes/Aero2.NormalColor.xaml
index ff971a58..2a5bd5ef 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Themes/Aero2.NormalColor.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/ChildWindow/Themes/Aero2.NormalColor.xaml
@@ -72,7 +72,8 @@
Height="{TemplateBinding Height}">
0) ? dict.GetType().GetGenericArguments()[0] : typeof( object );
+ var valueType = (item.Value != null)
+ ? item.Value.GetType()
+ : (dict.GetType().GetGenericArguments().Count() > 1) ? dict.GetType().GetGenericArguments()[ 1 ] : typeof( object );
+ var editableKeyValuePair = ListUtilities.CreateEditableKeyValuePair( item.Key
+ , keyType
+ , item.Value
+ , valueType );
+ this.Items.Add( editableKeyValuePair );
+ }
+ }
+ else
+ {
+ foreach( var item in newValue )
+ {
+ if( item != null )
+ {
+ Items.Add( item );
+ }
}
}
}
@@ -175,15 +200,27 @@ namespace Xceed.Wpf.Toolkit
base.OnApplyTemplate();
if( _newItemTypesComboBox != null )
+ {
_newItemTypesComboBox.Loaded -= new RoutedEventHandler( this.NewItemTypesComboBox_Loaded );
-
+ }
_newItemTypesComboBox = GetTemplateChild( PART_NewItemTypesComboBox ) as ComboBox;
-
if( _newItemTypesComboBox != null )
+ {
_newItemTypesComboBox.Loaded += new RoutedEventHandler( this.NewItemTypesComboBox_Loaded );
+ }
+
+ _listBox = this.GetTemplateChild( PART_ListBox ) as ListBox;
+ if( _propertyGrid != null )
+ {
+ _propertyGrid.PropertyValueChanged -= this.PropertyGrid_PropertyValueChanged;
+ }
_propertyGrid = GetTemplateChild( PART_PropertyGrid ) as PropertyGrid.PropertyGrid;
- }
+ if( _propertyGrid != null )
+ {
+ _propertyGrid.PropertyValueChanged += this.PropertyGrid_PropertyValueChanged;
+ }
+ }
public PropertyGrid.PropertyGrid PropertyGrid
{
@@ -343,6 +380,14 @@ namespace Xceed.Wpf.Toolkit
_newItemTypesComboBox.SelectedIndex = 0;
}
+ private void PropertyGrid_PropertyValueChanged( object sender, PropertyGrid.PropertyValueChangedEventArgs e )
+ {
+ if( _listBox != null )
+ {
+ _listBox.Items.Refresh();
+ }
+ }
+
#endregion
#region Commands
@@ -442,41 +487,87 @@ namespace Xceed.Wpf.Toolkit
internal void PersistChanges( IList sourceList )
{
- IList list = ComputeItemsSource();
- if( list == null )
+ var collection = ComputeItemsSource();
+ if( collection == null )
return;
- //the easiest way to persist changes to the source is to just clear the source list and then add all items to it.
- list.Clear();
+ //IDictionary and IDictionary
+ if( collection is IDictionary )
+ {
+ //For a Dictionary, we need to parse the list of EditableKeyValuePair and add KeyValuePair to the Dictionary.
+ var dict = (IDictionary)collection;
+ //the easiest way to persist changes to the source is to just clear the source list and then add all items to it.
+ dict.Clear();
- if( list.IsFixedSize )
+ foreach( var item in sourceList )
+ {
+ var propInfoKey = item.GetType().GetProperty( "Key" );
+ var propInfoValue = item.GetType().GetProperty( "Value" );
+ if( (propInfoKey != null) && (propInfoValue != null) )
+ {
+ dict.Add( propInfoKey.GetValue( item, null ), propInfoValue.GetValue( item, null ) );
+ }
+ }
+ }
+ //IList
+ else if( collection is IList )
{
- for( int i = 0; i < sourceList.Count; ++i )
- list[ i ] = sourceList[ i ];
+ var list = (IList)collection;
+
+ //the easiest way to persist changes to the source is to just clear the source list and then add all items to it.
+ list.Clear();
+
+ if( list.IsFixedSize )
+ {
+ for( int i = 0; i < sourceList.Count; ++i )
+ list[ i ] = sourceList[ i ];
+ }
+ else
+ {
+ foreach( var item in sourceList )
+ {
+ list.Add( item );
+ }
+ }
}
else
{
- foreach( var item in sourceList )
+ //ICollection (or IList)
+ var collectionType = collection.GetType();
+ var iCollectionOfTInterface = collectionType.GetInterfaces().FirstOrDefault( x => x.IsGenericType && (x.GetGenericTypeDefinition() == typeof( ICollection<> )) );
+ if( iCollectionOfTInterface != null )
{
- list.Add( item );
+ var argumentType = iCollectionOfTInterface.GetGenericArguments().FirstOrDefault();
+ if( argumentType != null )
+ {
+ var iCollectionOfTType = typeof( ICollection<> ).MakeGenericType( argumentType );
+
+ //the easiest way to persist changes to the source is to just clear the source list and then add all items to it.
+ iCollectionOfTType.GetMethod( "Clear" ).Invoke( collection, null );
+
+ foreach( var item in sourceList )
+ {
+ iCollectionOfTType.GetMethod( "Add" ).Invoke( collection, new object[] { item } );
+ }
+ }
}
}
}
- private IList CreateItemsSource()
+ private IEnumerable CreateItemsSource()
{
- IList list = null;
+ IEnumerable collection = null;
if( ItemsSourceType != null )
{
- ConstructorInfo constructor = ItemsSourceType.GetConstructor( Type.EmptyTypes );
+ var constructor = ItemsSourceType.GetConstructor( Type.EmptyTypes );
if( constructor != null )
{
- list = ( IList )constructor.Invoke( null );
+ collection = (IEnumerable)constructor.Invoke( null );
}
}
- return list;
+ return collection;
}
private object CreateNewItem( Type type )
@@ -484,7 +575,7 @@ namespace Xceed.Wpf.Toolkit
return Activator.CreateInstance( type );
}
- private IList ComputeItemsSource()
+ private IEnumerable ComputeItemsSource()
{
if( ItemsSource == null )
ItemsSource = CreateItemsSource();
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlButton.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlButton.cs
index 644b6b61..e410e072 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlButton.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlButton.cs
@@ -17,8 +17,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
using System.Windows;
using System.Windows.Controls;
@@ -61,12 +59,12 @@ namespace Xceed.Wpf.Toolkit
#region ItemsSource Property
- public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register( "ItemsSource", typeof( IList ), typeof( CollectionControlButton ), new UIPropertyMetadata( null ) );
- public IList ItemsSource
+ public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register( "ItemsSource", typeof( IEnumerable ), typeof( CollectionControlButton ), new UIPropertyMetadata( null ) );
+ public IEnumerable ItemsSource
{
get
{
- return ( IList )GetValue( ItemsSourceProperty );
+ return (IEnumerable)GetValue( ItemsSourceProperty );
}
set
{
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlDialog.xaml.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlDialog.xaml.cs
index b9196386..24e2436c 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlDialog.xaml.cs
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Implementation/CollectionControlDialog.xaml.cs
@@ -17,8 +17,13 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Windows;
using System.Windows.Media;
+using Xceed.Wpf.Toolkit.Core.Utilities;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Security;
namespace Xceed.Wpf.Toolkit
{
@@ -40,12 +45,12 @@ namespace Xceed.Wpf.Toolkit
#region Properties
- public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register( "ItemsSource", typeof( IList ), typeof( CollectionControlDialog ), new UIPropertyMetadata( null ) );
- public IList ItemsSource
+ public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register( "ItemsSource", typeof( IEnumerable ), typeof( CollectionControlDialog ), new UIPropertyMetadata( null ) );
+ public IEnumerable ItemsSource
{
get
{
- return ( IList )GetValue( ItemsSourceProperty );
+ return (IEnumerable)GetValue( ItemsSourceProperty );
}
set
{
@@ -145,6 +150,15 @@ namespace Xceed.Wpf.Toolkit
private void OkButton_Click( object sender, RoutedEventArgs e )
{
+ if( this.ItemsSource is IDictionary )
+ {
+ if( !this.AreDictionaryKeysValid() )
+ {
+ MessageBox.Show( "All dictionary items should have distinct non-null Key values.", "Warning" );
+ return;
+ }
+ }
+
_collectionControl.PersistChanges();
this.DialogResult = true;
this.Close();
@@ -157,40 +171,96 @@ namespace Xceed.Wpf.Toolkit
this.Close();
}
-#endregion //Event Hanlders
+ #endregion //Event Hanlders
-#region Private Methods
+ #region Private Methods
+ [SecuritySafeCritical]
private object Clone( object source )
{
+ if( source == null )
+ return null;
+
+ object result = null;
var sourceType = source.GetType();
- //Get default constructor
- var result = sourceType.GetConstructor( new Type[] { } ).Invoke( null );
- var properties = sourceType.GetProperties();
- foreach( var propertyInfo in properties )
+ // For IDictionary, we need to create EditableKeyValuePair to edit the Key-Value.
+ if( (this.ItemsSource is IDictionary)
+ && sourceType.IsGenericType
+ && typeof( KeyValuePair<,> ).IsAssignableFrom( sourceType.GetGenericTypeDefinition() ) )
+ {
+ result = this.GenerateEditableKeyValuePair( source );
+ }
+ else
{
- var propertyInfoValue = propertyInfo.GetValue( source, null );
+ // Initialized a new object with default values
+ result = FormatterServices.GetUninitializedObject( sourceType );
+ }
+ Debug.Assert( result != null );
+ if( result != null )
+ {
+ var properties = sourceType.GetProperties();
- if( propertyInfo.CanWrite )
+ foreach( var propertyInfo in properties )
{
- //Look for nested object
- if( propertyInfo.PropertyType.IsClass && (propertyInfo.PropertyType != typeof(Transform)) && !propertyInfo.PropertyType.Equals( typeof( string ) ) )
- {
- var nestedObject = this.Clone( propertyInfoValue );
- propertyInfo.SetValue( result, nestedObject, null );
- }
- else
+ var propertyInfoValue = propertyInfo.GetValue( source, null );
+
+ if( propertyInfo.CanWrite )
{
- // copy object
- propertyInfo.SetValue( result, propertyInfoValue, null );
+ //Look for nested object
+ if( propertyInfo.PropertyType.IsClass
+ && (propertyInfo.PropertyType != typeof( Transform ))
+ && !propertyInfo.PropertyType.Equals( typeof( string ) ) )
+ {
+ var nestedObject = this.Clone( propertyInfoValue );
+ propertyInfo.SetValue( result, nestedObject, null );
+ }
+ else
+ {
+ // copy object
+ propertyInfo.SetValue( result, propertyInfoValue, null );
+ }
}
}
- }
+ }
return result;
}
+ private object GenerateEditableKeyValuePair( object source )
+ {
+ var sourceType = source.GetType();
+ if( (sourceType.GetGenericArguments() == null) || (sourceType.GetGenericArguments().GetLength( 0 ) != 2) )
+ return null;
+
+ var propInfoKey = sourceType.GetProperty( "Key" );
+ var propInfoValue = sourceType.GetProperty( "Value" );
+ if( (propInfoKey != null) && (propInfoValue != null) )
+ {
+ return ListUtilities.CreateEditableKeyValuePair( propInfoKey.GetValue( source, null )
+ , sourceType.GetGenericArguments()[ 0 ]
+ , propInfoValue.GetValue( source, null )
+ , sourceType.GetGenericArguments()[ 1 ] );
+ }
+ return null;
+ }
+
+ private bool AreDictionaryKeysValid()
+ {
+ var keys = _collectionControl.Items.Select( x =>
+ {
+ var keyType = x.GetType().GetProperty( "Key" );
+ if( keyType != null )
+ {
+ return keyType.GetValue( x, null );
+ }
+ return null;
+ } );
+
+ return (keys.Distinct().Count() == _collectionControl.Items.Count )
+ && keys.All( x => x != null );
+ }
+
#endregion
}
}
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Aero2.NormalColor.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Aero2.NormalColor.xaml
index 2f4cb4f4..5a657dfd 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Aero2.NormalColor.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Aero2.NormalColor.xaml
@@ -23,7 +23,11 @@
xmlns:chrome="clr-namespace:Xceed.Wpf.Toolkit.Chromes"
xmlns:pg="clr-namespace:Xceed.Wpf.Toolkit.PropertyGrid">
-
+
+
+
+
+
@@ -91,7 +95,7 @@
Content="Add"
Command="New"
CommandParameter="{Binding SelectedItem, ElementName=PART_NewItemTypesComboBox}" />
-
@@ -229,10 +233,11 @@
RenderMouseOver="{TemplateBinding IsMouseOver}">
+ Width="9"
+ Height="5"
+ Data="{StaticResource DownArrowGeometry}"
+ Fill="#FF000000"
+ Margin="0,1,0,0"/>
diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Generic.xaml
index 00090181..5ef46daf 100644
--- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Generic.xaml
+++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/CollectionControl/Themes/Generic.xaml
@@ -22,6 +22,10 @@
xmlns:chrome="clr-namespace:Xceed.Wpf.Toolkit.Chromes"
xmlns:pg="clr-namespace:Xceed.Wpf.Toolkit.PropertyGrid">
+
+
+
+
@@ -102,7 +106,7 @@
Content="Add"
Command="New"
CommandParameter="{Binding SelectedItem, ElementName=PART_NewItemTypesComboBox}" />
-