enhance: auto-scroll to selected commit

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2025-06-30 15:56:31 +08:00
parent af1788e746
commit 63affefed8
2 changed files with 14 additions and 10 deletions

View File

@@ -40,6 +40,7 @@
RowHeight="26"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"
Loaded="OnCommitListLoaded"
LayoutUpdated="OnCommitListLayoutUpdated"
SelectionChanged="OnCommitListSelectionChanged"
ContextRequested="OnCommitListContextRequested"

View File

@@ -5,6 +5,7 @@ using Avalonia;
using Avalonia.Collections;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.VisualTree;
namespace SourceGit.Views
@@ -129,35 +130,37 @@ namespace SourceGit.Views
if (change.Property == NavigationIdProperty)
{
var list = CommitListContainer;
if (list is { SelectedItems.Count: 1 })
list.ScrollIntoView(list.SelectedItem, null);
if (CommitListContainer is { SelectedItems.Count: 1, IsLoaded: true } dataGrid)
dataGrid.ScrollIntoView(dataGrid.SelectedItem, null);
}
}
private void OnCommitListLoaded(object sender, RoutedEventArgs e)
{
if (CommitListContainer is { SelectedItems.Count: 1 } dataGrid)
dataGrid.ScrollIntoView(dataGrid.SelectedItem, null);
}
private void OnCommitListLayoutUpdated(object _1, EventArgs _2)
{
if (IsLoaded)
{
CommitGraph.InvalidateVisual();
}
}
private void OnCommitListSelectionChanged(object _, SelectionChangedEventArgs e)
{
if (DataContext is ViewModels.Histories histories)
{
histories.Select(CommitListContainer.SelectedItems);
}
e.Handled = true;
}
private void OnCommitListContextRequested(object sender, ContextRequestedEventArgs e)
{
if (DataContext is ViewModels.Histories histories && sender is DataGrid { SelectedItems.Count: > 0 } list)
if (DataContext is ViewModels.Histories histories && sender is DataGrid { SelectedItems.Count: > 0 } dataGrid)
{
var menu = histories.MakeContextMenu(list);
menu?.Open(list);
var menu = histories.MakeContextMenu(dataGrid);
menu?.Open(dataGrid);
}
e.Handled = true;
}