fixed a bug of Dialog

This commit is contained in:
NaBian committed 2020-05-18 23:04:35 +08:00
1 parent a794c2a2c0
commit 2a89bf42f7
5 files changed
+34 -22

No files matched your search

@@ -9,7 +9,7 @@
Background="{DynamicResource RegionBrush}"
MinWidth="500"
DataContext="{Binding DialogDemo,Source={StaticResource Locator}}">
<AdornerDecorator>
<hc:DialogContainer>
<hc:TransitioningContentControl>
<hc:SimplePanel>
<StackPanel Margin="32" VerticalAlignment="Center">
@@ -22,5 +22,5 @@
</StackPanel>
</hc:SimplePanel>
</hc:TransitioningContentControl>
</AdornerDecorator>
</hc:DialogContainer>
</UserControl>
@@ -14,7 +14,7 @@ namespace HandyControl.Controls
{
private string _token;
private Adorner _container;
private AdornerContainer _container;
private static readonly Dictionary<string, FrameworkElement> ContainerDic = new Dictionary<string, FrameworkElement>();
@@ -107,35 +107,36 @@ namespace HandyControl.Controls
FrameworkElement element;
AdornerDecorator decorator;
if (string.IsNullOrEmpty(token))
{
element = WindowHelper.GetActiveWindow();
decorator = VisualHelper.GetChild<AdornerDecorator>(element);
}
else
{
ContainerDic.TryGetValue(token, out element);
decorator = element is System.Windows.Window ?
VisualHelper.GetChild<AdornerDecorator>(element) :
VisualHelper.GetChild<DialogContainer>(element);
}
if (element != null)
if (decorator != null)
{
var decorator = VisualHelper.GetChild<AdornerDecorator>(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<AdornerDecorator>(element);
if (decorator != null)
@@ -0,0 +1,9 @@
using System.Windows.Documents;
namespace HandyControl.Controls
{
public class DialogContainer : AdornerDecorator
{
}
}
@@ -27,6 +27,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Controls\Block\FloatingBlock.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Button\SplitButton.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Carousel\CarouselItem.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Dialog\DialogContainer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Growl\GrowlWindow.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Image\ImageBlock.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Input\PinBox.cs" />
@@ -147,7 +148,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Controls\Carousel\Carousel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\ChatBubble.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\ColorPicker\ColorPicker.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\Dialog.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Dialog\Dialog.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\GotoTop.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\Gravatar.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Growl\Growl.cs" />
@@ -27,6 +27,7 @@ namespace HandyControl.Tools
public static T GetChild<T>(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++)