Change SelectionMode to Single for ListView

This commit is contained in:
Peter Kirmeier 2023-05-11 00:14:05 +02:00
parent fe2ab9b4ff
commit f73a674400
5 changed files with 42 additions and 16 deletions

View file

@ -163,7 +163,13 @@ namespace SystemTrayMenu.Handler
}
}
internal void DeselectFoccussedRow() => focussedMenu?.GetDataGridView().SelectedItems.Remove(focussedRow);
internal void DeselectFoccussedRow()
{
if (focussedMenu != null)
{
focussedMenu.SelectedItem = null;
}
}
internal void MouseSelect(Menu menu, ListViewItemData itemData)
{
@ -347,7 +353,10 @@ namespace SystemTrayMenu.Handler
if (doClearOldSelection)
{
menuBefore?.GetDataGridView().SelectedItems.Remove(rowBefore);
if (focussedMenu != null)
{
focussedMenu.SelectedItem = null;
}
}
}
@ -414,7 +423,7 @@ namespace SystemTrayMenu.Handler
private void Select(ListView dgv, ListViewItemData itemData)
{
focussedRow = itemData;
dgv.SelectedItems.Add(itemData);
dgv.SelectedItem = itemData;
}
}
}

View file

@ -390,7 +390,7 @@ namespace SystemTrayMenu.Business
Menu? menu = mainMenu;
if (menu != null)
{
menu.GetDataGridView().SelectedItem = null;
menu.SelectedItem = null;
menu.RelocateOnNextShow = true;

View file

@ -7,7 +7,6 @@ namespace SystemTrayMenu.Handler
using System;
using System.Windows.Threading;
using SystemTrayMenu.DataClasses;
using SystemTrayMenu.Utilities;
using static SystemTrayMenu.UserInterface.Menu;
using ListView = System.Windows.Controls.ListView;
using Menu = SystemTrayMenu.UserInterface.Menu;
@ -64,13 +63,13 @@ namespace SystemTrayMenu.Handler
timerStartLoad.Start();
}
internal void MouseLeave(ListView dgv)
internal void MouseLeave(Menu menu)
{
if (MouseActive)
{
timerStartLoad.Stop();
StopLoadMenu?.Invoke();
ResetData(dgv);
ResetData(menu);
}
}
@ -78,7 +77,7 @@ namespace SystemTrayMenu.Handler
{
timerStartLoad.Stop();
StopLoadMenu?.Invoke();
ResetData(menu.GetDataGridView());
ResetData(menu);
MouseActive = false;
}
@ -141,16 +140,16 @@ namespace SystemTrayMenu.Handler
{
alreadyOpened = false;
menu.GetDataGridView().SelectedItem = currentItemData = itemData;
menu.SelectedItem = currentItemData = itemData;
currentMenu = menu;
}
}
private void ResetData(ListView dgv)
private void ResetData(Menu menu)
{
if (currentMenu != null)
{
dgv.SelectedItem = currentItemData = null;
menu.SelectedItem = currentItemData = null;
currentMenu = null;
}
}

View file

@ -171,7 +171,7 @@
</Button>
</DockPanel>
<ListView x:Name="dgv" x:FieldModifier="internal" Margin="6,0" d:ItemsSource="{d:SampleData ItemCount=5}"
<ListView x:Name="dgv" x:FieldModifier="internal" Margin="6,0" d:ItemsSource="{d:SampleData ItemCount=5}" SelectionMode="Single"
Foreground="{x:Static stm:MenuDefines.ColorForeground}" BorderBrush="{x:Null}" Background="{x:Null}"
ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.ScrollChanged="HandleScrollChanged">
<ListView.ItemTemplate>

View file

@ -237,7 +237,7 @@ namespace SystemTrayMenu.UserInterface
internal event Action<Menu, ListViewItemData>? CellMouseEnter;
internal event Action<ListView>? CellMouseLeave;
internal event Action<Menu>? CellMouseLeave;
internal event Action<Menu, ListViewItemData>? CellMouseDown;
@ -278,6 +278,12 @@ namespace SystemTrayMenu.UserInterface
internal RowData? RowDataParent { get; set; }
internal ListViewItemData? SelectedItem
{
get => (ListViewItemData?)dgv.SelectedItem;
set => dgv.SelectedItem = value;
}
internal Menu MainMenu { get; init; }
internal Menu? ParentMenu => RowDataParent?.Owner;
@ -1200,7 +1206,7 @@ namespace SystemTrayMenu.UserInterface
ListView lv = (ListView)sender;
foreach (ListViewItemData itemData in lv.Items)
{
itemData.IsSelected = lv.SelectedItems.Contains(itemData);
itemData.IsSelected = lv.SelectedItem == itemData;
itemData.UpdateColors();
}
}
@ -1209,7 +1215,7 @@ namespace SystemTrayMenu.UserInterface
private void ListViewItem_MouseEnter(object sender, MouseEventArgs e) =>
CellMouseEnter?.Invoke(this, (ListViewItemData)((ListViewItem)sender).Content);
private void ListViewItem_MouseLeave(object sender, MouseEventArgs e) => CellMouseLeave?.Invoke(dgv);
private void ListViewItem_MouseLeave(object sender, MouseEventArgs e) => CellMouseLeave?.Invoke(this);
private void ListViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
@ -1250,6 +1256,7 @@ namespace SystemTrayMenu.UserInterface
private Brush? backgroundBrush;
private Brush? borderBrush;
private ImageSource? columnIcon;
private bool isSelected;
internal ListViewItemData(ImageSource? columnIcon, string columnText, RowData rowData, int sortIndex)
{
@ -1310,7 +1317,18 @@ namespace SystemTrayMenu.UserInterface
internal bool IsPendingOpenItem { get; set; }
internal bool IsSelected { get; set; }
internal bool IsSelected
{
get => isSelected;
set
{
if (value != isSelected)
{
isSelected = value;
CallPropertyChanged();
}
}
}
public override string ToString() => nameof(ListViewItemData) + ": " + ColumnText + ", Owner: " + (data.Owner?.ToString() ?? "null");