diff --git a/src/modules/launcher/PowerLauncher/ResultList.xaml b/src/modules/launcher/PowerLauncher/ResultList.xaml index c592e38645..38725a1d99 100644 --- a/src/modules/launcher/PowerLauncher/ResultList.xaml +++ b/src/modules/launcher/PowerLauncher/ResultList.xaml @@ -176,6 +176,7 @@ ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Single" SelectedIndex="{Binding Results.SelectedIndex, Mode=TwoWay}" + SelectionChanged="SuggestionsListView_SelectionChanged" ItemContainerStyle="{StaticResource ResultsListViewItemContainerStyle}" AutomationProperties.Name="{x:Static p:Resources.Results}"> @@ -208,7 +209,7 @@ - + @@ -288,9 +290,10 @@ VerticalAlignment="Center" Height="42" Width="42" + Name="commandButton" BorderThickness="1" > - + diff --git a/src/modules/launcher/PowerLauncher/ResultList.xaml.cs b/src/modules/launcher/PowerLauncher/ResultList.xaml.cs index c2375c3584..858b2b39c2 100644 --- a/src/modules/launcher/PowerLauncher/ResultList.xaml.cs +++ b/src/modules/launcher/PowerLauncher/ResultList.xaml.cs @@ -2,7 +2,9 @@ // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Windows; using System.Windows.Controls; +using System.Windows.Media; namespace PowerLauncher { @@ -15,5 +17,73 @@ namespace PowerLauncher { InitializeComponent(); } + + private ToolTip _previouslyOpenedToolTip; + + // From https://docs.microsoft.com/en-us/dotnet/desktop/wpf/data/how-to-find-datatemplate-generated-elements + private TypeChildItem FindVisualChild(DependencyObject obj) + where TypeChildItem : DependencyObject + { + for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) + { + DependencyObject child = VisualTreeHelper.GetChild(obj, i); + if (child != null && child is TypeChildItem) + { + return (TypeChildItem)child; + } + else + { + TypeChildItem childOfChild = FindVisualChild(child); + if (childOfChild != null) + { + return childOfChild; + } + } + } + + return null; + } + + private void HideCurrentToolTip() + { + if (_previouslyOpenedToolTip != null) + { + _previouslyOpenedToolTip.IsOpen = false; + } + } + + private void ContextMenuListView_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + var listView = sender as ListView; + if (listView.SelectedItem != null) + { + ListBoxItem listBoxItem = (ListBoxItem)listView.ItemContainerGenerator.ContainerFromItem(listView.SelectedItem); + ContentPresenter contentPresenter = FindVisualChild(listBoxItem); + DataTemplate dataTemplate = contentPresenter.ContentTemplate; + Button button = (Button)dataTemplate.FindName("commandButton", contentPresenter); + ToolTip tooltip = button.ToolTip as ToolTip; + tooltip.PlacementTarget = button; + tooltip.Placement = System.Windows.Controls.Primitives.PlacementMode.Right; + tooltip.PlacementRectangle = new Rect(0, button.Height, 0, 0); + tooltip.IsOpen = true; + } + } + + private void ToolTip_Opened(object sender, RoutedEventArgs e) + { + if (string.Equals(sender.GetType().FullName, "System.Windows.Controls.ToolTip", System.StringComparison.InvariantCulture)) + { + HideCurrentToolTip(); + _previouslyOpenedToolTip = (ToolTip)sender; + } + } + + private void SuggestionsListView_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (string.Equals(((ListView)e.OriginalSource).Name, "SuggestionsList", System.StringComparison.InvariantCulture)) + { + HideCurrentToolTip(); + } + } } }