Forge
csharpdeeb25a2
1using Avalonia;
2using Avalonia.Controls;
3using Avalonia.Input;
4using Avalonia.Interactivity;
5using CascadeIDE.ViewModels;
6
7namespace CascadeIDE.Views;
8
9public partial class TerminalMfdPageView : UserControl
10{
11 public TerminalMfdPageView()
12 {
13 InitializeComponent();
14 Loaded += OnLoaded;
15 TerminalHostChrome.PointerPressed += OnTerminalHostPointerPressed;
16 }
17
18 protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
19 {
20 base.OnPropertyChanged(change);
21 if (change.Property == IsVisibleProperty && change.GetNewValue<bool>())
22 ActivateTerminal();
23 }
24
25 private void OnLoaded(object? sender, RoutedEventArgs e) => ActivateTerminal();
26
27 private void OnTerminalHostPointerPressed(object? sender, PointerPressedEventArgs e)
28 {
29 if (e.GetCurrentPoint(TerminalHostChrome).Properties.IsLeftButtonPressed)
30 FocusTerminal();
31 }
32
33 private void ActivateTerminal()
34 {
35 if (DataContext is not MainWindowViewModel vm)
36 return;
37
38 // Явная привязка Model (как в sample AvaloniaTerminal) + фокус для KeyDown/TextInput.
39 TerminalView.Model = vm.TerminalPanel.TerminalModel;
40 vm.TerminalPanel.EnsureSessionStarted();
41 FocusTerminal();
42 }
43
44 private void FocusTerminal()
45 {
46 if (TerminalView.Model is null)
47 return;
48
49 TerminalView.Focus(NavigationMethod.Tab);
50 }
51}
52
View only · write via MCP/CIDE