Skip to content

Commit 6ab8ecc

Browse files
authored
NavigationViewItem: Empty tooltip no longer shown (#3430)
* Fix empty tooltip being shown even though it shouldn't. * Add API test. * Improve API testing. * Update API test.
1 parent 6bdf738 commit 6ab8ecc

2 files changed

Lines changed: 112 additions & 2 deletions

File tree

dev/NavigationView/NavigationViewItem.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,12 @@ void NavigationViewItem::UpdateNavigationViewItemToolTip()
231231
void NavigationViewItem::SuggestedToolTipChanged(winrt::IInspectable const& newContent)
232232
{
233233
auto potentialString = newContent.try_as<winrt::IPropertyValue>();
234-
const bool stringableToolTip = (potentialString && potentialString.Type() == winrt::PropertyType::String);
234+
const bool validStringableToolTip = potentialString
235+
&& potentialString.Type() == winrt::PropertyType::String
236+
&& !potentialString.GetString().empty();
235237

236238
winrt::IInspectable newToolTipContent{ nullptr };
237-
if (stringableToolTip)
239+
if (validStringableToolTip)
238240
{
239241
newToolTipContent = newContent;
240242
}

dev/NavigationView/NavigationView_ApiTests/NavigationViewTests.cs

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,5 +1091,113 @@ public void VerifyHierarchicalNavigationTopModeMenuItemsSourceDoesNotCrash()
10911091
Content.UpdateLayout();
10921092
});
10931093
}
1094+
1095+
[TestMethod]
1096+
public void VerifyNavigationViewItemToolTipCreation()
1097+
{
1098+
if (!PlatformConfiguration.IsOsVersionGreaterThanOrEqual(OSVersion.Redstone5))
1099+
{
1100+
Log.Warning("On RS4 and earlier the test needs to be modified slightly.");
1101+
return;
1102+
}
1103+
1104+
RunOnUIThread.Execute(() =>
1105+
{
1106+
var navView = new NavigationView();
1107+
1108+
// Item with null content
1109+
var menuItem1 = new NavigationViewItem();
1110+
1111+
// Item with empty string as content
1112+
var menuItem2 = new NavigationViewItem();
1113+
menuItem2.Content = "";
1114+
1115+
// Item with null content and custom tooltip
1116+
var menuItem3 = new NavigationViewItem();
1117+
ToolTipService.SetToolTip(menuItem3, "Custom tooltip");
1118+
1119+
// Item with non-empty string content
1120+
var menuItem4 = new NavigationViewItem();
1121+
menuItem4.Content = "Item 4";
1122+
1123+
navView.MenuItems.Add(menuItem1);
1124+
navView.MenuItems.Add(menuItem2);
1125+
navView.MenuItems.Add(menuItem3);
1126+
navView.MenuItems.Add(menuItem4);
1127+
1128+
// Use a pane configuration where tooltips are shown.
1129+
navView.PaneDisplayMode = NavigationViewPaneDisplayMode.Left;
1130+
navView.IsPaneOpen = false;
1131+
1132+
Content = navView;
1133+
navView.UpdateLayout();
1134+
1135+
Verify.AreEqual(null, ToolTipService.GetToolTip(menuItem1), "Item 1's tooltip should have been [null].");
1136+
Verify.AreEqual(null, ToolTipService.GetToolTip(menuItem2), "Item 2's tooltip should have been [null].");
1137+
Verify.AreEqual("Custom tooltip", ToolTipService.GetToolTip(menuItem3), "Item 3's tooltip should have been \"Custom tooltip\".");
1138+
Verify.AreEqual("Item 4", ToolTipService.GetToolTip(menuItem4), "Item 4's tooltip should have been \"Item 4\".");
1139+
});
1140+
}
1141+
1142+
[TestMethod]
1143+
public void VerifyNavigationViewItemToolTipPaneDisplayMode()
1144+
{
1145+
if (!PlatformConfiguration.IsOsVersionGreaterThanOrEqual(OSVersion.Redstone5))
1146+
{
1147+
Log.Warning("On RS4 and earlier the test needs to be modified slightly.");
1148+
return;
1149+
}
1150+
1151+
RunOnUIThread.Execute(() =>
1152+
{
1153+
var navView = new NavigationView();
1154+
1155+
// Item with non-empty string content using in-built tooltip
1156+
var menuItem1 = new NavigationViewItem();
1157+
menuItem1.Content = "Item 1";
1158+
1159+
// Item with custom tooltip
1160+
var menuItem2 = new NavigationViewItem();
1161+
menuItem2.Content = "Item 2";
1162+
ToolTipService.SetToolTip(menuItem2, "Custom tooltip");
1163+
1164+
navView.MenuItems.Add(menuItem1);
1165+
navView.MenuItems.Add(menuItem2);
1166+
1167+
Content = navView;
1168+
1169+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.Left, false, "Item 1", "Custom tooltip");
1170+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.Left, true, null, "Custom tooltip");
1171+
1172+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.LeftCompact, false, "Item 1", "Custom tooltip");
1173+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.LeftCompact, true, null, "Custom tooltip");
1174+
1175+
// Show tooltips again
1176+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.Left, false, "Item 1", "Custom tooltip");
1177+
1178+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.LeftMinimal, true, null, "Custom tooltip");
1179+
1180+
// Show tooltips again
1181+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.Left, false, "Item 1", "Custom tooltip");
1182+
1183+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.Top, false, null, "Custom tooltip");
1184+
1185+
// Show tooltips again
1186+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.Left, false, "Item 1", "Custom tooltip");
1187+
1188+
SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode.Top, true, null, "Custom tooltip");
1189+
1190+
void SetPaneConfigAndVerifyToolTips(NavigationViewPaneDisplayMode paneDisplayMode, bool isPaneOpen, string expectedDefaultToolTip, string expectedCustomToolTip)
1191+
{
1192+
Log.Comment($"Verifying tooltips with PaneDisplayMode=[{paneDisplayMode}] and IsPaneOpen=[{isPaneOpen}]");
1193+
navView.PaneDisplayMode = paneDisplayMode;
1194+
navView.IsPaneOpen = isPaneOpen;
1195+
Content.UpdateLayout();
1196+
1197+
Verify.AreEqual(expectedDefaultToolTip, ToolTipService.GetToolTip(menuItem1), $"Item 1's tooltip should have been \"{expectedDefaultToolTip ?? "null"}\".");
1198+
Verify.AreEqual(expectedCustomToolTip, ToolTipService.GetToolTip(menuItem2), $"Item 2's tooltip should have been {expectedCustomToolTip}.");
1199+
}
1200+
});
1201+
}
10941202
}
10951203
}

0 commit comments

Comments
 (0)