diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DialogDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DialogDemoCtl.xaml
index 2c99969a..3df8f88e 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DialogDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DialogDemoCtl.xaml
@@ -9,7 +9,7 @@
Background="{DynamicResource RegionBrush}"
MinWidth="500"
DataContext="{Binding DialogDemo,Source={StaticResource Locator}}">
-
+
@@ -22,5 +22,5 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Dialog.cs b/src/Shared/HandyControl_Shared/Controls/Dialog/Dialog.cs
similarity index 83%
rename from src/Shared/HandyControl_Shared/Controls/Other/Dialog.cs
rename to src/Shared/HandyControl_Shared/Controls/Dialog/Dialog.cs
index 31c93d2e..0161ea09 100644
--- a/src/Shared/HandyControl_Shared/Controls/Other/Dialog.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Dialog/Dialog.cs
@@ -14,7 +14,7 @@ namespace HandyControl.Controls
{
private string _token;
- private Adorner _container;
+ private AdornerContainer _container;
private static readonly Dictionary ContainerDic = new Dictionary();
@@ -107,35 +107,36 @@ namespace HandyControl.Controls
FrameworkElement element;
+ AdornerDecorator decorator;
if (string.IsNullOrEmpty(token))
{
element = WindowHelper.GetActiveWindow();
+ decorator = VisualHelper.GetChild(element);
}
else
{
ContainerDic.TryGetValue(token, out element);
+ decorator = element is System.Windows.Window ?
+ VisualHelper.GetChild(element) :
+ VisualHelper.GetChild(element);
}
- if (element != null)
+ if (decorator != null)
{
- var decorator = VisualHelper.GetChild(element);
- if (decorator != null)
+ if (decorator.Child != null)
{
- if (decorator.Child != null)
+ decorator.Child.IsEnabled = false;
+ }
+ var layer = decorator.AdornerLayer;
+ if (layer != null)
+ {
+ var container = new AdornerContainer(layer)
{
- decorator.Child.IsEnabled = false;
- }
- var layer = decorator.AdornerLayer;
- if (layer != null)
- {
- var container = new AdornerContainer(layer)
- {
- Child = dialog
- };
- dialog._container = container;
- dialog.IsClosed = false;
- layer.Add(container);
- }
+ Child = dialog
+ };
+ dialog._container = container;
+ dialog.IsClosed = false;
+ layer.Add(container);
}
}
@@ -156,7 +157,7 @@ namespace HandyControl.Controls
private void Close(DependencyObject element)
{
- if (element != null)
+ if (element != null && _container != null)
{
var decorator = VisualHelper.GetChild(element);
if (decorator != null)
diff --git a/src/Shared/HandyControl_Shared/Controls/Dialog/DialogContainer.cs b/src/Shared/HandyControl_Shared/Controls/Dialog/DialogContainer.cs
new file mode 100644
index 00000000..539bf07f
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Controls/Dialog/DialogContainer.cs
@@ -0,0 +1,9 @@
+using System.Windows.Documents;
+
+namespace HandyControl.Controls
+{
+ public class DialogContainer : AdornerDecorator
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
index 076eb50b..f1268f17 100644
--- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
+++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
@@ -27,6 +27,7 @@
+
@@ -147,7 +148,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs
index 84a088e1..5fd55877 100644
--- a/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs
+++ b/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs
@@ -27,6 +27,7 @@ namespace HandyControl.Tools
public static T GetChild(DependencyObject d) where T : DependencyObject
{
+ if (d == null) return default;
if (d is T t) return t;
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(d); i++)