diff --git a/dev/NavigationView/NavigationViewList.cpp b/dev/NavigationView/NavigationViewList.cpp index 26309b774a..3a0639b836 100644 --- a/dev/NavigationView/NavigationViewList.cpp +++ b/dev/NavigationView/NavigationViewList.cpp @@ -26,6 +26,15 @@ bool NavigationViewList::IsItemItsOwnContainerOverride(winrt::IInspectable const bool isItemItsOwnContainerOverride = false; if (args) { + // This validation is only relevant outside of the Windows build where WUXC and MUXC have distinct types. +#if !BUILD_WINDOWS + // Certain items are disallowed in a NavigationView's items list. Check for them. + if (args.try_as()) + { + throw winrt::hresult_invalid_argument(L"MenuItems contains a Windows.UI.Xaml.Controls.NavigationViewItem. This control requires that the NavigationViewItems be of type Microsoft.UI.Xaml.Controls.NavigationViewItem."); + } +#endif + auto nvib = args.try_as(); if (nvib && nvib != m_lastItemCalledInIsItemItsOwnContainerOverride.get()) { @@ -56,6 +65,7 @@ void NavigationViewList::PrepareContainerForItemOverride(winrt::DependencyObject itemContainer.UseSystemFocusVisuals(m_showFocusVisual); winrt::get_self(itemContainer)->ClearIsContentChangeHandlingDelayedForTopNavFlag(); } + __super::PrepareContainerForItemOverride(element, item); } @@ -133,4 +143,4 @@ void NavigationViewList::PropagateChangeToAllContainers(std::function + { + var navView = new NavigationView(); + + var muxItem = new Microsoft.UI.Xaml.Controls.NavigationViewItem { Content = "MUX Item" }; + navView.MenuItems.Add(muxItem); + + navView.MenuItems.Add(new Microsoft.UI.Xaml.Controls.NavigationViewItemSeparator()); + + // No errors should occur here when we only use MUX items + navView.UpdateLayout(); + + var wuxItem = new Windows.UI.Xaml.Controls.NavigationViewItem { Content = "WUX Item" }; + navView.MenuItems.Add(wuxItem); + + // But adding a WUX item should generate an exception (as soon as the new item gets processed) + Verify.Throws(() => { navView.UpdateLayout(); }); + }); + } +#endif } }