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++)