Repository metrics
- Stars
- (23,245 stars)
- PR merge metrics
- (Avg merge 47d 9h) (248 merged PRs in 30d)
Description
Description
The documentation shows that IsPresented must be set to false so that the flyout closes on phones:
void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = e.CurrentSelection.FirstOrDefault() as FlyoutPageItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
IsPresented = false;
}
}
But this code throws an exception on the Windows platform: https://github.com/dotnet/maui/blob/65104a2163505138e3b9f2cc798a2e9c4f577566/src/Controls/src/Core/FlyoutPage.cs#L286-L289
Please, update the documentation. See workaround.
Xamarin: The behavior changed since Xamarin 5. In Xamarin I have used: https://github.com/jbe2277/waf/blob/acbf97f70736203b47e5e99d399d691d6121fb0f/src/NewsReader/NewsReader.Presentation/Views/ShellView.xaml.cs#L64
This doesn't work correct anymore. The exception is raised on the Windows platform.
Maybe related: https://github.com/dotnet/maui/issues/9801
Steps to Reproduce
Clone this repo: https://github.com/jbe2277/waf/tree/b42f0f1a26287dce428f3c34a2c90b4a7d2aeab7
Link to public reproduction project repository
https://github.com/jbe2277/waf/tree/b42f0f1a26287dce428f3c34a2c90b4a7d2aeab7
Version with bug
6.0.486 (current)
Last version that worked well
Unknown/Other
Affected platforms
Windows
Affected platform versions
net6.0-windows10.0.19041.0
Did you find any workaround?
This commit solved the issue: https://github.com/jbe2277/waf/commit/69803cef490970a344c370616021464f59ae201d
The important part is:
if (!((IFlyoutPageController)this).ShouldShowSplitMode) IsPresented = false;
I believe this API has some flaws:
- It's necessary to cast
thisso thatShouldShowSplitModecan be accessed. However, this is a main use case and so it should be accessible directly viaFlyoutPage. - The
CanChangeIsPresentedproperty which I used first for the check doesn't work as expected. Although the property returnedtrue, setting ofIsPresented = falseresulted in the exception.
Relevant log output
No response