зеркало из https://github.com/DeGsoft/maui-linux.git
[UWP] Escape key returns ActionSheet result (#208)
When awaiting a DisplayActionSheet in UWP, pressing the escape key with the ActionSheet open would dismiss the dialog but not return a result.
This commit is contained in:
Родитель
d5be2f0144
Коммит
ed517a3027
|
@ -0,0 +1,41 @@
|
|||
using System;
|
||||
|
||||
using Xamarin.Forms.CustomAttributes;
|
||||
using Xamarin.Forms.Internals;
|
||||
|
||||
#if UITEST
|
||||
using Xamarin.UITest;
|
||||
using NUnit.Framework;
|
||||
#endif
|
||||
|
||||
namespace Xamarin.Forms.Controls.Issues
|
||||
{
|
||||
[Preserve(AllMembers = true)]
|
||||
[Issue(IssueTracker.Bugzilla, 40998, "[UWP] Pressing escape with an awaited DisplayActionSheet doesn't return a result", PlatformAffected.WinRT)]
|
||||
public class Bugzilla40998 : TestContentPage
|
||||
{
|
||||
protected override void Init()
|
||||
{
|
||||
var resultLabel = new Label
|
||||
{
|
||||
Text = "ActionSheet Result - use the ActionSheet to show the result"
|
||||
};
|
||||
Content = new StackLayout
|
||||
{
|
||||
Children =
|
||||
{
|
||||
resultLabel,
|
||||
new Button
|
||||
{
|
||||
Text = "Click to display ActionSheet",
|
||||
Command = new Command(async () =>
|
||||
{
|
||||
var result = await DisplayActionSheet("Test ActionSheet", "Cancel", "Destroy", new string[] { "Test Button" });
|
||||
resultLabel.Text = result;
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -105,6 +105,7 @@
|
|||
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla40333.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla31806.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla41078.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla40998.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" />
|
||||
|
|
|
@ -13,7 +13,9 @@ using Windows.UI.Xaml.Media;
|
|||
using Windows.UI.Xaml.Media.Animation;
|
||||
|
||||
#if WINDOWS_UWP
|
||||
using Windows.Foundation;
|
||||
using Windows.Foundation.Metadata;
|
||||
using Windows.UI.Core;
|
||||
using Windows.UI.ViewManagement;
|
||||
#endif
|
||||
|
||||
|
@ -591,6 +593,17 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
options.SetResult((string)e.ClickedItem);
|
||||
};
|
||||
|
||||
TypedEventHandler<CoreWindow, CharacterReceivedEventArgs> onEscapeButtonPressed = delegate(CoreWindow window, CharacterReceivedEventArgs args)
|
||||
{
|
||||
if (args.KeyCode == 27)
|
||||
{
|
||||
dialog.Hide();
|
||||
options.SetResult(ContentDialogResult.None.ToString());
|
||||
}
|
||||
};
|
||||
|
||||
Window.Current.CoreWindow.CharacterReceived += onEscapeButtonPressed;
|
||||
|
||||
_actionSheetOptions = options;
|
||||
|
||||
if (options.Cancel != null)
|
||||
|
@ -604,6 +617,8 @@ namespace Xamarin.Forms.Platform.WinRT
|
|||
options.SetResult(options.Cancel);
|
||||
else if (result == ContentDialogResult.Primary)
|
||||
options.SetResult(options.Destruction);
|
||||
|
||||
Window.Current.CoreWindow.CharacterReceived -= onEscapeButtonPressed;
|
||||
}
|
||||
#else
|
||||
void OnPageActionSheet(Page sender, ActionSheetArguments options)
|
||||
|
|
Загрузка…
Ссылка в новой задаче