diff --git a/src/SheetMe.Designer/Themes/DesignerTheme.xaml b/src/SheetMe.Designer/Themes/DesignerTheme.xaml
index c1e8f88..a359b32 100644
--- a/src/SheetMe.Designer/Themes/DesignerTheme.xaml
+++ b/src/SheetMe.Designer/Themes/DesignerTheme.xaml
@@ -143,6 +143,27 @@
+
+
+
+
-
@@ -104,6 +113,7 @@
SelectionMode="Extended" Padding="0,6,0,0"
MouseDoubleClick="OnLayerDoubleClick"
PreviewMouseLeftButtonDown="OnLayerRowPressed"
+ KeyDown="OnLayerListKeyDown"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
diff --git a/src/SheetMe.Designer/Views/LayerPanelView.xaml.cs b/src/SheetMe.Designer/Views/LayerPanelView.xaml.cs
index 43f37ef..bc07b2b 100644
--- a/src/SheetMe.Designer/Views/LayerPanelView.xaml.cs
+++ b/src/SheetMe.Designer/Views/LayerPanelView.xaml.cs
@@ -75,6 +75,47 @@ public partial class LayerPanelView : System.Windows.Controls.UserControl
}
}
+ ///
+ /// 레이어 목록 단축키 — 그룹/삭제/복사/되돌리기.
+ ///
+ /// 이 키들은 원래 가 처리하는데, 그 behavior 는
+ /// 캔버스에 붙어 있어서 포커스가 목록에 있으면 이벤트가 거기까지 가지 않는다.
+ /// 목록에서 여러 행을 골라 놓고 Ctrl+G 를 눌렀을 때 아무 일도 안 일어나던 이유가 이것이다.
+ ///
+ /// 방향키·Home/End·문자 타이핑은 넘기지 않는다 — 목록 자체의 이동·형식 검색이 우선이다.
+ /// 그룹 이름을 편집 중일 때도 통과시킨다(입력 보호).
+ ///
+ private void OnLayerListKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
+ {
+ if (Designer is not { } designer
+ || System.Windows.Input.Keyboard.FocusedElement
+ is System.Windows.Controls.Primitives.TextBoxBase or System.Windows.Controls.ComboBox)
+ {
+ return;
+ }
+
+ var ctrl = System.Windows.Input.Keyboard.Modifiers.HasFlag(System.Windows.Input.ModifierKeys.Control);
+ var shift = System.Windows.Input.Keyboard.Modifiers.HasFlag(System.Windows.Input.ModifierKeys.Shift);
+ var handled = true;
+
+ switch (e.Key)
+ {
+ case System.Windows.Input.Key.G when ctrl && shift: designer.UngroupSelection(); break;
+ case System.Windows.Input.Key.G when ctrl: designer.GroupSelection(); break;
+ case System.Windows.Input.Key.C when ctrl: designer.CopySelection(); break;
+ case System.Windows.Input.Key.X when ctrl: designer.CutSelection(); break;
+ case System.Windows.Input.Key.V when ctrl: designer.Paste(); break;
+ case System.Windows.Input.Key.D when ctrl: designer.CopySelection(); designer.Paste(); break;
+ case System.Windows.Input.Key.Z when ctrl: designer.Undo.Undo(); break;
+ case System.Windows.Input.Key.Y when ctrl: designer.Undo.Redo(); break;
+ case System.Windows.Input.Key.Delete: designer.DeleteSelection(); break;
+ case System.Windows.Input.Key.Escape: designer.Selection.Clear(); break;
+ default: handled = false; break;
+ }
+
+ e.Handled = handled;
+ }
+
/// 페이지 헤더의 복제 버튼
private void OnPageDuplicateClick(object sender, RoutedEventArgs e)
{